• Flutter自定义tabbar任意样式


    场景描述

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

    TabIndicator extends Decoration

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

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

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

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

     思路描述

    1. /// The length of this list must match the [controller]'s [TabController.length]
    2. /// and the length of the [TabBarView.children] list.
    3. final List tabs;

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

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

    1. getAllTabs() {
    2. return [
    3. for (int i = 0; i < controller.tabs.length; i++)
    4. Tab(
    5. child: Stack(
    6. children: [
    7. ImageUtils.assetImage(
    8. isSelect
    9. ? "bg_data_tab_select"
    10. : "bg_data_tab_unselect",
    11. width: 72.w,
    12. height: 34.w,
    13. fit: BoxFit.cover),
    14. // 这个是我自定义背景 文字widget 你可以使用普通text
    15. UIText(
    16. widgetWidth: 72.w,
    17. widgetHeight: 34.w,
    18. fontWeight: FontWeight.w500,
    19. text: controller.tabs[i],
    20. fontSize: 18.w,
    21. textAlign: TextAlign.center,
    22. widgetAlignment: Alignment.center,
    23. fontColor: isSelect
    24. ? const Color(0xFF202437)
    25. : Colors.white,
    26. letterSpacing: -0.04,
    27. )
    28. ],
    29. ),
    30. ),
    31. ];

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

    1. TabBar(
    2. onTap: (index) {
    3. // 赋值
    4. controller.tabIndex = index;
    5. // 封装的刷新 一般对应setState
    6. controller.update();
    7. },

  • 相关阅读:
    生产者消费者模型
    蓝牙耳机什么牌子好?口碑最好的蓝牙耳机品牌排行
    【数据结构】手撕单链表
    直播和短视频美颜sdk的开发流程、代码分析
    Linux命令详解(14)useradd命令
    基于时空RBF-NN的混沌时间序列预测(Matlab代码实现)
    六、redis安装和配置
    git版本管理的使用
    dantax参数调优
    月薪 3万人民币是一种怎样的体验?做自媒体可以达到这种水平吗
  • 原文地址:https://blog.csdn.net/qq_28844947/article/details/136197151