【Flutter 3-1】Flutter手把手教程UI布局和Widget——底部导航栏BottomNavigationBar使用

2023-10-27

作者 | 弗拉德
来源 | 弗拉德(公众号:fulade_me)

BottomNavigationBar

BottomNavigationBarBottomNavigationBarItem 配合来共同展示Flutter里面的底部状态栏,底部状态栏是在移动端很重要的控件。

先看一下 BottomNavigationBar构造方法


BottomNavigationBar({
    // key
    Key key,
    /// BottomNavigationBarItem 数组
    @required this.items,
    /// 点击事件方法
    this.onTap,
    /// 当前选中的 元素下标
    this.currentIndex = 0,
    ///  底部导航栏的Z坐标
    this.elevation,
    /// 默认是 BottomNavigationBarType.shifting 一般我们使用 BottomNavigationBarType.fixed
    this.type,
    /// 选中项目颜色的值
    Color fixedColor,
    /// 背景颜色
    this.backgroundColor,
    /// BottomNavigationBarItem图标的大小
    this.iconSize = 24.0,
    /// 选中时图标和文字的颜色
    Color selectedItemColor,
    /// 未选中时图标和文字的颜色
    this.unselectedItemColor,
    // 选中时的子Item的样式
    this.selectedIconTheme,
    /// 未选中时的子Item的样式
    this.unselectedIconTheme,
    // 选中时字体大小
    this.selectedFontSize = 14.0,
    /// 未选中时的字体大小
    this.unselectedFontSize = 12.0,
    /// 选中的时候的字体样式
    this.selectedLabelStyle,
    /// 未选中时的字体样式
    this.unselectedLabelStyle,
    /// 是否为未选择的BottomNavigationBarItem显示标签
    this.showSelectedLabels = true,
     是否为选定的BottomNavigationBarItem显示标签
    this.showUnselectedLabels,
    /// pc端或web端使用
    this.mouseCursor,
})

我们来做一个点击底部状态栏按钮切换颜色的Demo

class _BottomNavigationBarDemoPageState
    extends State<BottomNavigationBarDemoPage> {
  int selectedIndex = 0;
  List<Container> containerList = [
    Container(
      color: Colors.red,
    ),
    Container(
      color: Colors.blue,
    ),
    Container(
      color: Colors.yellow,
    ),
    Container(
      color: Colors.green,
    )
  ];
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        centerTitle: true,
        title: Text("BottomNavigationBarDemo"),
        backgroundColor: Colors.blue,
      ),
      body: containerList[selectedIndex],
      bottomNavigationBar: BottomNavigationBar(
        /// 这个很重要
        type: BottomNavigationBarType.fixed,
        currentIndex: selectedIndex,
        onTap: (index) {
          setState(() {
            selectedIndex = index;
          });
        },
        items: <BottomNavigationBarItem>[
          BottomNavigationBarItem(
            title: Text('F1'),
            icon: Icon(Icons.home),
          ),
          BottomNavigationBarItem(
            title: Text('F2'),
            icon: Icon(Icons.book),
          ),
          BottomNavigationBarItem(
            title: Text('F3'),
            icon: Icon(Icons.school),
          ),
          BottomNavigationBarItem(
            title: Text('F4'),
            icon: Icon(Icons.perm_identity),
          ),
        ],
      ),
    );
  }
}
  • Scaffold接收一个BottomNavigationBar作为bottomNavigationBar的参数,然后BottomNavigationBar接收一个items的数组,这个数组里面传入了4个BottomNavigationBarItem对象分别命名为F1F2F3F4

  • type参数传入的是BottomNavigationBarType.fixed,默认是BottomNavigationBarType.shifting,默认的效果是 只有在选中BottomNavigationBarItem时才会显示文字。设置成BottomNavigationBarType.fixed非选中状态下也会显示文字和图标

  • onTap实现的是一个方法,参数是被点击的当前BottomNavigationBarItem的下标,在这里被点击后调用setState来刷新页面的颜色

效果如下:

2020_01_29_bottom_navigation_bar

日常开发中以上效果基本能满足大多数需求
如果想要自定义下面Icon的样式,可以使用 BottomAppBar

这里也介绍两个不错的库

  • tab_bar_animation

    链接: https://github.com/tunitowen/tab_bar_animation
    效果如下:
    2020_01_29_bottom_th2

  • simpleanimations
    链接: https://github.com/TechieBlossom/simpleanimations
    效果如下:
    2020_01_29_bottom_th1

想体验以上的示例的运行效果,可以到我的Github仓库项目flutter_app->lib->routes->bottom_navigation_page.dart查看,并且可以下载下来运行并体验。


公众号

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【Flutter 3-1】Flutter手把手教程UI布局和Widget——底部导航栏BottomNavigationBar使用 的相关文章

随机推荐

  • python中安装pyinstaller库的方法

    最近 在学习python过程中运用到了一个python的第三方库pyinstaller 是一个可以把程序打包为一个可执行文件 用户可以直接运行 一 pyinstaller库的安装 1 pip包安装 因为在配置python环境中自带了一个下载
  • Vuepress 文档脚手架(vue 3.x+vuepress2.x+vite+ts)

    在项目扩展到一定程度 我们会对项目中大量的公共业务做封装 当多人开发时就带来一个问题 如何让所有人快速使用封装好的组件 降低学习成本 这里提供一个解决方案 那就是Vuepress框架 最新的 Vuepress2 x 框架已经蓄势待发 支持V
  • 请用ST语言写一个6轴搬运机器人的底层程序

    ST语言是指Structured Text语言 它是一种PLC 可编程控制器 编程语言 用于编写工业自动化控制程序 以下是一份可以用于编写6轴搬运机器人的底层程序的示例 PROGRAM main VAR posX posY posZ REA
  • 【蓝牙串口通讯基础知识

    蓝牙串口通讯基础知识 一 串口 串行接口简称为串口 也叫串行通信接口 一般也叫COM口 这是一个统称 采用串行通信的接口都叫作串口 串口是一个硬件接口 UART是UniversalAsynchronous Receiver Transmit
  • layui子页面中退出登录使父页面跳转到登录页面

    在layui的iframe模板中 因为页面都是通过iframe方式引入的 所以在子 iframe 页面中使用location href user login html 后 跳转的页面依然显示在内联框架中 而不是父页面跳转 parent lo
  • 无人驾驶系统Autoware与仿真环境LGSVL Simulator联合配置

    在此 把在Ubuntu 16 04中 搭建无人驾驶系统Autoware编译环境 配置无人驾驶仿真环境LGSVL Simulator 并进行联合测试的步骤 记录下来 以备查阅 系统配置 我所用的配置 需要两个系统 一个Ubuntu系统 一个W
  • 服务器如何安装虚拟机,服务器如何安装虚拟机

    服务器如何安装虚拟机 内容精选 换一换 确认虚拟机使用的网卡安全组配置是否正确 在弹性云服务器详情页面查看网卡使用的安全组 查看安全组是否已放行100 125 0 0 16网段的地址 如果没有放行 请添加100 125 0 0 16网段的入
  • java/lang/NoClassDefFoundError: java/lang/Object

    一 问题描述 本地原来已经安装了JAVA JDK1 7并配置好了环境变量 然后又安装了JDK1 8 想2个版本并存 然后发现eclipse 打不开 闪退 在命令行执行以下语句 C Users Administrator gt java ve
  • ECU-TEST 快速入门

    ECU TEST 是由位于德国德累斯顿的TraceTronic公司开发的一款用于嵌入式系统测试验证软件工具 自从2003年首次发布ECU TEST 该软件成为了汽车ECU开发的标准工具 同时也逐步成为了重型机械和工业自动化开发的标准工具 该
  • 数学建模竞赛培训:华为杯、高教社杯和数学建模国赛全面指南

    文章目录 赛事介绍 参赛好处 辅导比赛 赛事介绍 华为杯全国研究生数学建模竞赛是由华为公司主办的一项面向全国研究生的数学建模竞赛 该竞赛旨在通过实际问题的建模和解决 培养研究生的创新能力和团队合作精神 推动科技创新和应用 华为杯竞赛分为初赛
  • git commit报did not match any file known to git

    使用到以下命令时 git commit m project initialized 回车之后报错了 报了以下的错误 error pathspec initialized did not match any file s known to g
  • hive截取字符串substr和substring的用法

    第一种用法 substr string A int start 和 substring string A int start 用法一样 功效 返回字符串A从下标start位置到结尾的字符串 第二种用法 substr string A int
  • “最强”博士论文答辩阵容:6位院士,副院长任答辩秘书!

    点击 凹凸域 马上关注 更多内容 请置顶或星标 十二月份前后 是不少研究生毕业答辩的时间段 在社交媒体上 关于论文答辩的热度也逐渐上升 与此同时 也有网友注意到一些答辩委员会的阵容非常强大 比如 就有微博用户表示 其导师请了足以给博士生论文
  • layui table的实现以及详细解释

    老规矩先看效果 这里用的主要是layui 的弹框和table数据表格 第一 引入的文件 百度网盘地址 https pan baidu com s 1neZbcX8IieMgiBdcVPhO1g 提取码 rqdc 改成本地路径 这里也可以用l
  • 从 Vision 到 Language 再到 Action,万字漫谈三年跨域信息融合研究

    本文作者为阿德莱德大学助理教授吴琦 他在为雷锋网 AI 科技评论投递的独家稿件中回顾了他从跨领域图像识别到 Vision to Language 相关的研究思路 如今正将研究领域延伸到与 Action 相关的工作 雷锋网 AI 科技评论对文
  • 6.63 猜数字之生成随机数

    1 生成 m n 的随机数 m n 的元素个数为 n m 1 若利用模进行 n m 1 运算 其结果为 0 n m 此时左右两边同加 m 其结果为 m n void TestRand 生成 m n 的随机数 rand n m 1 m sra
  • Django图书商城系统实战开发 - 实现个人中心管理

    Django图书商城系统实战开发 实现个人中心管理 介绍 在本项目中 我们已经实现了登录注册 商品详情查看 购物车购买 个人订单管理 评价功能 接下来 我们将完成个人中心管理的模块 包括个人密码修改 个人地址管理和注销功能 本文将详细介绍如
  • I2C总结(单主机和多主机)

    I2C在使用过程中单个主机是不论是硬件I2C还是硬件I2C都不太难 理解好时序很容易实现 还有就是很多人认为硬件I2C有很多缺点 其实这是谬论吧 硬件I2C在稳定性上胜过软件I2C 而且不占用MCU时间 可以实现I2C中断 如果系统有硬件I
  • Java开发快速上手!3分钟就能完成的Redis主从复制搭建,完整PDF

    前言 高并发 几乎是每个程序员都想拥有的经验 原因很简单 随着流量变大 会遇到各种各样的技术问题 比如接口响应超时 CPU load升高 GC频繁 死锁 大数据量存储等等 这些问题能推动我们在技术深度上不断精进 我们知道 高并发代表着大流量
  • 【Flutter 3-1】Flutter手把手教程UI布局和Widget——底部导航栏BottomNavigationBar使用

    作者 弗拉德 来源 弗拉德 公众号 fulade me BottomNavigationBar BottomNavigationBar 和 BottomNavigationBarItem 配合来共同展示Flutter里面的底部状态栏 底部状