码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 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. },

  • 相关阅读:
    2022年湖北省省级重点龙头企业申报奖励补贴标准以及认定条件
    ESP32网络开发实例-从SPIFFS加载Web页面文件
    12个Python自动化办公的官方文档,中文版只有2个?
    nodejs之jsdom插件,运行浏览器环境
    LeetCode 0234. 回文链表
    酷快讯:九个让你在熊市打脸“加密仇恨者”的强力反驳
    Web前端:CSS篇(二)背景,文本,链接
    C语言序列化与反序列化--TCL中支持的数据结构(二)
    如何使用uiautomation开发一套自动朋友圈自动点赞的桌面应用
    Vue页面监听键盘按键的多种方法
  • 原文地址:https://blog.csdn.net/qq_28844947/article/details/136197151
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号