Slip是自定义的一个部件,它对应的状态类,需要混合(with)一个类**SingleTickerProviderStateMixin**
INFO
继承、混合、实现是dart语言的特性,其中混合更是向Java这种面向对象语言所不具备的。
groovy
class _SlipState extends State<Slip> with SingleTickerProviderStateMixin { }
成员变
需要准备的成员变量
- 控制器,用户控制tab的切换和主体部分的滑动
- tab集合:包含tab数据
- bodyList集合:主体部分内容的集合
groovy
//控制器
late TabController _tabController;
//tab集合
List<Tab> tabs = <Tab>[];
//主题页面集合
List<Widget>bodyList = [];
初始化initState
在生命周期函数initState中初始化数据和控制器,这个方法只会被调用一次。
groovy
@override
void initState() {
super.initState();
//初始化tab
tabs = <Tab>[
const Tab(text: "新闻",),
const Tab(text: "娱乐",),
const Tab(text: "文化",),
const Tab(text: "科技",),
];
//创建主题页面
for (int i = 0; i < tabs.length; ++i) {
bodyList.add(Center(child: tabs[i],));
}
_tabController = TabController(length: tabs.length, vsync: this);
}
build
build函数返回一个脚手架,头部部分使用TabBar
,主体部分使用TabBarView
groovy
return Scaffold(
appBar: AppBar(
title: TabBar(
tabs: tabs,
controller: _tabController,
isScrollable: true,
),
centerTitle: true,
),
body: TabBarView(
controller: _tabController,
children: bodyList,
),
);