Flutter系列之设置TabBar的tab紧凑排列

我们在使用flutter的TabBar组件的时候会发现,TabBar当中的tab的是平分宽度的,因为TabBar中的tab是一个flex布局,

如果你只有两三个tab,想让它紧凑排列,应该怎么办呢?

要设置一个属性 isScrollable 为 true

TabBar(
  labelColor: Colors.primaryTextColor,
  labelStyle:
      TextStyle(color: Colors.primaryTextColor, fontSize: 14),
  unselectedLabelColor: Colors.primaryTextColor,
  unselectedLabelStyle:
      TextStyle(color: Colors.primaryTextColor, fontSize: 14),
  isScrollable: true,
  indicator: BoxDecoration(
      color: Colors.amber,
      borderRadius: BorderRadius.all(Radius.circular(15))),
  controller: _tabController,
  onTap: _changeTab,
  tabs: _subjectList.map((e) => Tab(text: e.subjectName)).toList(),
)

设置 isScrollable 为 true就可以让TabBar中的tab紧凑排列,这是为什么呢?

看下源码:

final int tabCount = widget.tabs.length;
    for (int index = 0; index < tabCount; index += 1) {
      wrappedTabs[index] = InkWell(
        mouseCursor: widget.mouseCursor ?? SystemMouseCursors.click,
        onTap: () { _handleTap(index); },
        child: Padding(
          padding: EdgeInsets.only(bottom: widget.indicatorWeight),
          child: Stack(
            children: <Widget>[
              wrappedTabs[index],
              Semantics(
                selected: index == _currentIndex,
                label: localizations.tabLabel(tabIndex: index + 1, tabCount: tabCount),
              ),
            ],
          ),
        ),
      );
      if (!widget.isScrollable)
        wrappedTabs[index] = Expanded(child: wrappedTabs[index]);
    }

看最后一段,如果widget不是isScrollable的话,会加嵌套一层Expanded布局,Expanded就是flex = 1,所以就是平分父容器,

如果是scrollable的话,就会自适应大小

 

 

 

  • 5
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
Flutter是一种跨平台的移动应用开发框架,可以方便地创建漂亮且高性能的移动应用。滚动吸顶TabBar是指在页面滚动过程中,TabBar能够固定在页面的顶部,以保持在用户视野内,并且随着页面的滚动而切换选项卡。 为了实现滚动吸顶TabBar,我们可以使用Flutter提供的ScrollController来监听页面的滚动,并根据滚动的位置来决定TabBar的状态。 首先,我们需要创建一个ScrollController对象,并将其传递给滚动的可滚动组件(例如ListView、ScrollView等)的controller属性中。 然后,我们可以使用ScrollController的addListener方法来监听滚动过程中的位置变化。在listener中,我们可以根据滚动的位置来判断是否需要将TabBar固定在顶部,或者将其恢复到正常位置。 具体的实现步骤如下: 1. 创建一个滚动控制器对象:ScrollController _scrollController = ScrollController(); 2. 将滚动控制器对象传递给可滚动组件的controller属性:ListView(controller: _scrollController, ...) 3. 在页面构建方法中使用ScrollController的addListener方法:_scrollController.addListener(() { if (_scrollController.offset > 0) { // 需要吸顶处理 } else { // 恢复正常位置 } }); 4. 在需要吸顶处理的地方,将TabBar固定在顶部,例如将TabBar放在一个Stack组件中,并设置其alignment属性为Alignment.topCenter。 5. 在需要恢复正常位置的地方,将TabBar恢复到原始位置。 通过以上的步骤,我们就可以实现滚动吸顶TabBar的效果了。需要注意的是,根据实际情况,可能还需要处理一些细节,例如切换选项卡时的动画效果等。可以根据具体需求进行相应的调整和优化。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值