Flutter学习笔记(三)

如何控制点击不同的Tab页,显示或者隐藏appbar


问题场景:

现在大多数的app都是一种布局,即下方三五个tab,点击切换上面对应的页面,在Android中一般用自定义或者tablayout联动viewpager去实现这个大致的ui框架,而在flutter可以用bottomNavigationBar + TabBar + TabBarView 或者是pageview ,那么我的问题就来了,我有四个tab,前三个用的一个appbar,在第四个不要了


问题分析:
appbar的显示隐藏肯定是要有一个地方控制,我们根据点击TabBar后的index去判断,当index = 3的时候隐藏tabbar,隐藏肯定是整个appbar,但是他没有android一样的visibility的属性,经查阅资料,我们需要用Offstage将appbar包起来,然后 offstage: true/false 属性去控制Offstage内部的显示隐藏

问题解决:

 @override
  Widget build(BuildContext context) {
    return new Scaffold(
      resizeToAvoidBottomPadding: true, // 重新布局避免被键盘盖住内容,默认true
      appBar: PreferredSize(
          child: Offstage(
            offstage: controller.index == 3 ? true : false,
            child: AppBar(
            // 这里放自己的appbar内容
            ),
          ),
          preferredSize: Size.fromHeight(50.0)),
      body: new TabBarView(
          controller: controller,
          children: <Widget>[
            new Page0(),
            new Page1(db),
            new Page2(),
            Page3()
          ]),
      bottomNavigationBar: Material(
        color: const Color(0xFFF0EEEF), //底部导航栏主题颜色
        child: SafeArea(
          child: Container(
            height: 65.0,
            decoration: BoxDecoration(
              color: const Color(0xFFF0F0F0),
              boxShadow: <BoxShadow>[
                BoxShadow(
                  color: const Color(0xFFd0d0d0),
                  blurRadius: 3.0,
                  spreadRadius: 2.0,
                  offset: Offset(-1.0, -1.0),
                ),
              ],
            ),
            child: TabBar(
                isScrollable: false,
                controller: controller,
//                indicatorColor: Theme.of(context).primaryColor,
                //tab标签下划线颜色
                indicatorColor: Colors.white,
                //tab标签颜色
//                labelColor: const Color(0xFFffff),
                indicatorWeight: 3.0,
                labelColor: Theme.of(context).primaryColor,
                unselectedLabelColor: const Color(0xFF8E8E8E),
                tabs: myTabs),
          ),
        ),
      ),
    );
  }

重点在上面的Offstage


----此博客仅为个人学习总结观点,如有问题欢迎评论探讨!

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值