Skip to content

Slip是自定义的一个部件,它对应的状态类,需要混合(with)一个类**SingleTickerProviderStateMixin**

INFO

继承、混合、实现是dart语言的特性,其中混合更是向Java这种面向对象语言所不具备的。

groovy
class _SlipState extends State<Slip> with SingleTickerProviderStateMixin { }

成员变

需要准备的成员变量

  1. 控制器,用户控制tab的切换和主体部分的滑动
  2. tab集合:包含tab数据
  3. 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,
  ),
);