import 'package:flutter/material.dart';
class NextPage extends StatefulWidget {
@override
_NextPageState createState() => _NextPageState();
}
class Choice {
const Choice({this.title,this.icon});
final String title;
final IconData icon;
}
const List<Choice> choices = const <Choice>[
const Choice(title: 'CAR',icon: Icons.directions_car),
const Choice(title: 'BICYCLE',icon:Icons.directions_bike ),
const Choice(title: 'BOAT',icon: Icons.directions_boat),
const Choice(title: 'BUS',icon: Icons.directions_bus),
const Choice(title: 'TRAIN',icon: Icons.directions_train),
const Choice(title: 'WALK',icon: Icons.directions_walk),
];
class ChoiceCard extends StatelessWidget {
const ChoiceCard({Key key ,this.choice}) :super(key: key);
final Choice choice;
@override
Widget build(BuildContext context) {
final TextStyle textStyle = Theme.of(context).textTheme.headline1;
return Card(
child: Center(
child: Column(
mainAxisSize: MainAxisSize.min,
crossAxisAlignment: CrossAxisAlignment.center,
children: <Widget>[
Icon(choice.icon,size: 128.0,color: textStyle.color,),
Text(choice.title,style: textStyle),
],
),
),
);
}
}
class _NextPageState extends State<NextPage> with SingleTickerProviderStateMixin {
TabController _tabController;
// 初始化方法
@override
void initState() {
// TODO: implement initState
super.initState();
_tabController = TabController(length: choices.length, vsync: this);
}
// 销毁的方法
@override
void dispose() {
_tabController.dispose();
super.dispose();
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('NextPage'),
leading: IconButton(
tooltip: 'Previous choice', // 提示语
icon: const Icon(Icons.arrow_back),
onPressed: (){
_nextPage(-1);
},
),
actions: [
IconButton(icon: const Icon(Icons.arrow_forward),
tooltip: 'Next choice',
onPressed: (){
_nextPage(1);
}),
],
bottom: PreferredSize(
preferredSize: const Size.fromHeight(48),
child: Theme(
data: Theme.of(context).copyWith(accentColor: Colors.white),
child: Container(
color: Colors.red,
height: 48.0,
alignment: Alignment.center,
child: TabPageSelector(controller: _tabController,),
),
),
),
),
body: TabBarView(
controller: _tabController,
children: choices.map((Choice choice) {
return Padding(padding: const EdgeInsets.all(16.0),
child: ChoiceCard(choice: choice),
);
}).toList(),
),
);
}
// 点击事件....
void _nextPage(int delta){
final int newIndex = _tabController.index + delta;
if (newIndex < 0 || newIndex >= _tabController.length) {
// return;
_tabController.animateTo(newIndex);
}
}
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律