Flutter之TabBar+TabBarView及保存页面状态

Flutter之TabBar+TabBarView及保存页面状态

// 主页面
class TabBarDemo extends StatefulWidget {
  @override
  State<StatefulWidget> createState() {
    return _TabBarDemoState();
  }
}

class _TabBarDemoState extends State<TabBarDemo>
    with SingleTickerProviderStateMixin {
  TabController _tabController;
  List<String> titles = <String>["首页", "我的"];

  @override
  void initState() {
    super.initState();
    _tabController = TabController(length: titles.length, vsync: this);
  }

  @override
  void dispose() {
    _tabController.dispose();
    super.dispose();
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: PreferredSize(
        // PreferredSize 设置appbar 的高度
        preferredSize: Size.fromHeight(48),
        child: AppBar(
          titleSpacing: 0.0, // AppBar边距
          title: TabBar(
            // 设置两个按钮
            tabs: <Tab>[
              Tab(
                text: titles[0],
              ),
              Tab(
                text: titles[1],
              ),
            ],
            isScrollable: false,
            // 是否可以滚动
//            indicator: BoxDecoration( // 自定义指示器
//              color: Colors.red,
//            ),
            indicatorPadding: EdgeInsets.zero,
            labelPadding: EdgeInsets.zero,
            // 文字的内边距
            labelColor: Colors.red,
            // 选中文字的颜色
            unselectedLabelColor: Colors.black,
            // 未选中文字的颜色
            controller: _tabController,
            // 指示器控制器
            indicatorColor: Colors.white,
            // 指示器的颜色
            indicatorSize: TabBarIndicatorSize.tab,
            //指示器样式
            indicatorWeight: 10.0, // 指示器的高度
          ),
        ),
      ),
      body: TabBarView(
        children: <Widget>[Text(titles[0]), ListDemo()],
        controller: _tabController,
      ),
    );
  }
}

class ListDemo extends StatefulWidget {
  @override
  State<StatefulWidget> createState() {
    return ListDemoState();
  }
}

class ListDemoState extends State<ListDemo> with AutomaticKeepAliveClientMixin{
  // AutomaticKeepAliveClientMixin 保存页面状态
  @override
  Widget build(BuildContext context) {
    super.build(context);
    return ListView.builder(itemBuilder: (context, index) => Text("内容$index"),itemCount: 100,);
  }

  @override
  bool get wantKeepAlive => true;
}

效果图
在这里插入图片描述

保存页面状态
AutomaticKeepAliveClientMixin

  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值