Flutter自定义tabbar任意样式

场景描述

最近在使用遇到几组需要自定义的tabbar或者类似组件,在百度查询资料中通常,需要自定义

复制代码
TabIndicator extends Decoration

比如上图中的带圆角的指示器这样实现

就很麻烦, 搜出来的相关也是在此之处上自己画,主要再遇到一个稍微特殊的,比如带背景切换的,带特殊图形或者path的,费事费力。

有经验同学可能就会相当那我干脆直接用radiogroup做单选然后去关联page切换。但再劳神之前,

不如点进去tabbar看一下,flutter精髓之一就是万物皆为widget,局部子的自定义正式优势所在,

思路描述

Dart 复制代码
  /// The length of this list must match the [controller]'s [TabController.length]
  /// and the length of the [TabBarView.children] list.
  final List<Widget> tabs;

很明显这个是可以随意自定义的,

我们先定义好 两种切换状态的Widget

Dart 复制代码
getAllTabs() {
      return <Tab>[
        for (int i = 0; i < controller.tabs.length; i++)
          Tab(
            child: Stack(
              children: [
                ImageUtils.assetImage(
                    isSelect
                        ? "bg_data_tab_select"
                        : "bg_data_tab_unselect",
                    width: 72.w,
                    height: 34.w,
                    fit: BoxFit.cover),
                // 这个是我自定义背景 文字widget 你可以使用普通text
                UIText(
                  widgetWidth: 72.w,
                  widgetHeight: 34.w,
                  fontWeight: FontWeight.w500,
                  text: controller.tabs[i],
                  fontSize: 18.w,
                  textAlign: TextAlign.center,
                  widgetAlignment: Alignment.center,
                  fontColor: isSelect
                      ? const Color(0xFF202437)
                      : Colors.white,
                  letterSpacing: -0.04,
                )
              ],
            ),
          ),
      ];

此时我们只需要得到isSelect值,改变的时候动态去刷新state即可 将前面的isSelect 改为controller.tabIndex =i即可

Dart 复制代码
  TabBar(
                      onTap: (index) {
                        // 赋值
                        controller.tabIndex = index;
                        // 封装的刷新 一般对应setState
                        controller.update();
},
相关推荐
xiaoxue..21 小时前
从 “手动搬砖“ 到 “自动施法“:界面开发的三次 “渡劫“ 升级记
前端·前端框架·vue
帅气马战的账号121 小时前
Flutter 全场景开发实战宝典:组件化架构、性能优化与跨端适配深度解析
flutter
帅气马战的账号11 天前
开源鸿蒙×Flutter 跨端融合实践宝典:原生能力深度复用与组件化开发全解析
flutter
豫狮恒1 天前
OpenHarmony Flutter 分布式任务调度:跨设备负载均衡与资源优化方案
分布式·flutter·wpf·openharmony
Monly211 天前
Vue:使用v-if v-else加载两个el-table 在切换时,会出现数据在家混乱 数据加载不全的情况
前端·javascript·vue.js
南知意-1 天前
一个基于 Vue、Datav、Echart 框架开源免费的数据大屏可视化系统
前端·javascript·vue.js·开源软件·大屏项目
修己xj1 天前
FlatNas:打造你的专属浏览器仪表盘,一个集优雅与实用于一身的开源导航页
前端
哆啦A梦15881 天前
【vue实战】商城后台管理系统 03 首页-路由界面基础搭建
前端·javascript·vue.js
几何心凉1 天前
小白上手代理网络,搭建自己的数据抓取工具
前端
豫狮恒1 天前
OpenHarmony Flutter 原子化服务开发实战:轻量、跨端、分布式的全场景落地
flutter·wpf·openharmony