Flutter之TabBar+PageView

Flutter之TabBar+PageView

底部TabBar

class PageViewDemo extends StatefulWidget {
  @override
  State<StatefulWidget> createState() => _PageViewDemoState();
}

class _PageViewDemoState extends State<PageViewDemo>
    with SingleTickerProviderStateMixin {
  TabController _tabController;
  PageController _pageController = PageController();
  List<String> titles = ["首页", "账单", "我的"];

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

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

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      // 底部
      bottomNavigationBar: Material(
        color: Colors.white,
        child: TabBar(tabs: <Tab>[
          Tab(
            text: titles[0],
          ),
          Tab(
            text: titles[1],
          ),
          Tab(
            text: titles[2],
          ),
        ],
          indicatorColor: Colors.blue,
          indicatorWeight: 5.0,
          controller: _tabController,
          labelColor: Colors.red,
          unselectedLabelColor: Colors.grey,
          onTap: (index){
            _pageController.jumpToPage(index);
          },
        ),
      ),
      body: PageView(
        controller: _pageController,
        children: <Widget>[
          Text(titles[0]),
          Text(titles[1]),
          Text(titles[2])
//          TopPageViewDemo(),
        ],
        onPageChanged: (index){
          _tabController.animateTo(index);
        },
      ),
    );
  }
}

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

顶部TabBar

class TopPageViewDemo extends StatefulWidget{
  @override
  State<StatefulWidget> createState() => TopPageViewDemoState();
}

class TopPageViewDemoState extends State<TopPageViewDemo> with SingleTickerProviderStateMixin{
  TabController _tabController;
  PageController _pageController = PageController();
  List<String> titles = ["首页", "我的"];

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

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


  @override
  Widget build(BuildContext context) {
      return Scaffold(
        appBar: AppBar(
          title: Text("AppBarTitle",style: TextStyle(color: Colors.black),),
          backgroundColor: Colors.white,
          bottom: TabBar(tabs: <Tab>[
            Tab(
              text: titles[0],
            ),
            Tab(
              text: titles[1],
            ),
          ],
          controller: _tabController,
          indicatorColor: Colors.red,
          labelColor: Colors.black,
          unselectedLabelColor: Colors.grey,
          ),
        ),
        body: PageView(
          controller: _pageController,
          children: <Widget>[
            Text(titles[0]),
            Text(titles[1]),
          ],
          onPageChanged: (index){
            _tabController.animateTo(index);
          },
        ),
      );
  }
}

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值