【Flutter】底部导航BottomNavigationBar的使用
常用基本属性
| 属性名 | 含义 | 是否必须 |
|---|---|---|
| items | 底部导航栏的子项List | 是 |
| currentIndex | 当前显示索引 | 否 |
| onTap | 底部导航栏的点击事件, Function(int) | 否 |
| type | 底部导航栏类型,定义 [BottomNavigationBar] 的布局和行为 | 否 |
| selectedItemColor | 选中项图标和label的颜色 | 否 |
| unselectedItemColor | 未选中项图标和label的颜色 | 否 |
| iconSize | 图标大小 | 否 |
| backgroundColor | 底部导航栏背景色 | 否 |
| showSelectedLabels | 是否显示选中项的label | 否 |
| showUnselectedLabels | 是否显示未选中项的label | 否 |
| selectedIconTheme | 选中项 图标的主题 设置 | 否 |
| unselectedIconTheme | 选中项 图标的主题 设置 | 否 |
| selectedFontSize | 选中项 文字大小 设置 | 否 |
| unselectedFontSize | 未选中项 文字大小 设置 | 否 |
| selectedLabelStyle | 选中项 文字样式 设置 | 否 |
| unselectedLabelStyle | 未选中项 文字样式 设置 | 否 |
| mouseCursor | 当鼠标指针进入或悬停在屏幕上时的光标 | 否 |
| enableFeedback | 检测到的手势是否应提供声音和/或触觉反馈 | 否 |
示例
效果一
当选中时图标文字变色,未选中时不显示文字

bottomNavigationBar: BottomNavigationBar(selectedItemColor: Colors.red, // 选中时unselectedItemColor: Colors.black, // 未选中currentIndex: _currentIndex,onTap: (value) {setState(() {_currentIndex = value;});},items: const [BottomNavigationBarItem(icon: Icon(Icons.home),label: 'Home',),// ...],),
效果二
显示图标和文字,选中变色

可设置type: BottomNavigationBarType.fixed固定或设置showUnselectedLabels: true
bottomNavigationBar: BottomNavigationBar(selectedItemColor: Colors.red, // 选中时unselectedItemColor: Colors.black, // 未选中type: BottomNavigationBarType.fixed, // 固定currentIndex: _currentIndex,onTap: (value) {setState(() {_currentIndex = value;});},items: const [BottomNavigationBarItem(icon: Icon(Icons.home),label: 'Home',),// ...],),
效果三
显示图标和文字,设置背景

type: BottomNavigationBarType.fixed必须与backgroundColor配合使用,背景才生效
bottomNavigationBar: BottomNavigationBar(selectedItemColor: Colors.red, // 选中时unselectedItemColor: Colors.black, // 未选中type: BottomNavigationBarType.fixed, // 固定backgroundColor: Colors.amber, // 背景色currentIndex: _currentIndex,onTap: (value) {setState(() {_currentIndex = value;});},items: const [BottomNavigationBarItem(icon: Icon(Icons.home),label: 'Home',),// ...],),
完整示例
class PageWidget extends StatefulWidget {const PageWidget({super.key});State<PageWidget> createState() => _PageWidgetState();
}class _PageWidgetState extends State<PageWidget> {int _currentIndex = 0;Widget _getPage(index) {final List<Widget> _pages = <Widget>[Container(color: Colors.red,child: ElevatedButton(onPressed: () {Navigator.pushNamed(context, '/user-page');},child: const Text('User Page'),)),Container(color: Colors.green,),Container(color: Colors.blue,),Container(color: Colors.yellow,),];return _pages[index];}Widget build(BuildContext context) {return Scaffold(appBar: AppBar(title: const Text('Page Widget'),),bottomNavigationBar: BottomNavigationBar(backgroundColor: Colors.amber,type: BottomNavigationBarType.fixed,// showSelectedLabels: true,// showUnselectedLabels: true,selectedItemColor: Colors.red,unselectedItemColor: Colors.black,currentIndex: _currentIndex,onTap: (value) {setState(() {_currentIndex = value;});},items: const [BottomNavigationBarItem(icon: Icon(Icons.home),label: 'Home',),BottomNavigationBarItem(icon: Icon(Icons.business),label: 'Business',),BottomNavigationBarItem(icon: Icon(Icons.school),label: 'School',),BottomNavigationBarItem(icon: Icon(Icons.account_circle),label: 'User',),],),body: _getPage(_currentIndex),);}
}相关文章:
【Flutter】底部导航BottomNavigationBar的使用
常用基本属性 属性名含义是否必须items底部导航栏的子项List是currentIndex当前显示索引否onTap底部导航栏的点击事件, Function(int)否type底部导航栏类型,定义 [BottomNavigationBar] 的布局和行为否selectedItemColor选中项图标和label的颜色否unsel…...
Vue封装全局公共方法
有的时候,我们需要在多个组件里调用一个公共方法,这样我们就能将这个方法封装成全局的公共方法。 我们先在src下的assets里新建一个js文件夹,然后建一个common.js的文件,如下图所示: 然后在common.js里写我们的公共方法,比如这里我们写了一个testLink的方法,然后在main…...
雪花算法生成分布式主键ID
直接上代码,复制即可使用 public class SnowflakeIdGenerator {private static final long START_TIMESTAMP 1624000000000L; // 设置起始时间戳,2021-06-18 00:00:00private static final long DATA_CENTER_ID_BITS 5L;private static final long WO…...
第三百五十九回
文章目录 1. 概念介绍2. 使用方法3. 代码与效果3.1 示例代码3.2 运行效果 4. 内容总结 013pickers2.gif 我们在上一章回中介绍了"如何实现Numberpicker"相关的内容,本章回中将介绍wheelChoose组件.闲话休提,让我们一起Talk Flutter吧。 1. 概念…...
vue3 用xlsx 解决 excel 低版本office无法打开问题
需求背景解决思路解决效果将json导出为excel将table导为excel导出样式 需求背景 原使用 vue3-json-excel ,导致在笔记本office环境下,出现兼容性问题 <vue3-json-excel class"export-btn" :fetch"excelGetList" :fields"js…...
Java后端底座从无到有的搭建(随笔)
文章目录 开发模式的演变草创时期1.0时期(基座时期)1.1时期(低代码时期)2.0时期(无代码时期) 前言:本文是笔者在初创公司,一年多来Java后端服务底座搭建过程的总结,如有不…...
Rust介绍与开发环境搭建
Rust 是一种系统编程语言,它专注于内存安全、并发和性能。它是由 Mozilla 开发的,并得到了许多社区的广泛支持。Rust 的设计理念是“安全 by default”,这意味着你不需要特殊的工具或技巧来编写安全的代码。 Rust 的主要特点: 内…...
本地TCP通讯(C++)
概要 利用TCP技术,实现本地ROS1和ROS2的通讯。 服务端代码 头文件 #include <ros/ros.h> #include "std_msgs/String.h" #include "std_msgs/Bool.h" #include <iostream> #include <cstring> #include <unistd.h>…...
docker 安装jenkins
使用 Docker 安装 Jenkins 是一种快速、方便的方法,可以避免本地环境的复杂依赖。以下是通过 Docker 安装 Jenkins 的基本步骤: 安装 Docker: 如果你的系统尚未安装 Docker,请先安装 Docker。对于 Ubuntu 系统,可以通过…...
电脑黑屏什么都不显示怎么办 电脑开机黑屏不显示任何东西的4种解决办法
相信有很多网友都有经历电脑开机黑屏不显示任何东西,找了很多方法都没处理好,其实关于这个的问题,首先还是要了解清楚开机黑屏的原因,才能够对症下药,下面大家可以跟小编一起来看看怎么解决吧 电脑开机黑屏不显示任何…...
MT8781核心板_MTK8781安卓核心板规格参数
MT8781安卓核心板以其强大的性能和高效的能耐备受瞩目。其八核CPU架构包括(2x Cortex-A76 2.2GHz 6x Cortex-A55 2.0GHz),以及高性能的Arm Mali G57级GPU。同时,配备高达2,133MHz的LPDDR4X内存和快速的UFS 2.2级存储,大大加速了数据访问速…...
HTML知识点
HTML 【一】HTML简介 【1】什么是HTML HTML是一种用于创建网页结构和内容的超文本标记语言,它是构建网页的基础。为了让浏览器正确渲染页面,我们必须遵循HTML的语法规则。浏览器在解析网页时会将HTML代码转换为可视化的页面,所以我们在浏览…...
聊聊分库分表
文章导读 背景介绍 随着互联网技术的发展,数据量呈爆炸性增长。大数据量的业务场景中,数据库成为系统性能瓶颈的一个主要因素。当单个数据库包含了太多数据或过高的访问量时,会出现查询缓慢、响应时间长等问题,严重影响用户体验。…...
小米标准模组+MCU 快速上手开发(二)——之模组串口调试
小米标准模组MCU 开发笔记之固件调试 背景技术名词简介● 小米IoT开发者平台● 小米IoT 模组● 固件● OTA● CRC32 固件双串口调试● MHCWB6S-IB 模组资料下载● MHCWB6S-IB 模组管脚图● 上电调试 背景 小米标准模组MCU的开发过程中,由于部分官方资料较为古早&am…...
Ubuntu22.04和Windows10双系统安装
概要 本篇演示Ubuntu22.04和Windows10双系统的安装。先安装Ubuntu22.04,再安装Windows10。 一、说明 1、电脑 笔者的电脑品牌是acer(宏碁/宏基) 电脑开机按F2进入BIOS 电脑开机按F12进入Boot Manager 2、U盘启动盘 需要用到两个U盘启动盘 (1&a…...
重新安装VSCode后,按住Ctrl(or Command) 点击鼠标左键不跳转问题
重新安装VSCode后,按住Ctrl(or Command) 点击鼠标左键不跳转问题 原因:重新安装一般是因为相应编程语言的插件被删除了或还没有下载。 本次是由于Python相关的插件被删除了,因此导致Python无法跳转。 解决办法 在vs…...
QPaint绘制自定义仪表盘组件01
网上抄别人的,只是放这里自己看一下,看完就删掉 ui Dashboard.pro QT core guigreaterThan(QT_MAJOR_VERSION, 4): QT widgetsCONFIG c11# You can make your code fail to compile if it uses deprecated APIs. # In order to do so, uncomm…...
华为笔记本原厂系统镜像恢复安装教程方法
1.安装方法有两种,一种是用PE安装,一种是华为工厂包安装(安装完成自带F10智能还原) 若没有原装系统文件,请在这里远程恢复安装:https://pan.baidu.com/s/166gtt2okmMmuPUL1Fo3Gpg?pwdm64f 提取码:m64f …...
互联网高科技公司领导AI工业化,MatrixGo加速人工智能落地
作者:吴宁川 AI(人工智能)工业化与AI工程化正在引领人工智能的大趋势。AI工程化主要从企业CIO角度,着眼于在企业生产环境中规模化落地AI应用的工程化举措;而AI工业化则从AI供应商的角度,着眼于以规模化方式…...
Apache服务
目录 引言 一、常见的http服务程序 (一)lls (二)nginx (三)Apache (四)Tomcat 二、Apache特点 三、Apache服务的安装 (一)yum安装及配置文件 1.配置…...
Steam创意工坊模组下载神器:跨平台游戏玩家的必备工具
Steam创意工坊模组下载神器:跨平台游戏玩家的必备工具 【免费下载链接】WorkshopDL WorkshopDL - The Best Steam Workshop Downloader 项目地址: https://gitcode.com/gh_mirrors/wo/WorkshopDL 你知道吗?作为一名游戏爱好者,你是否曾…...
[特殊字符] TCP/IP四层协议栈解析——互联网通信的“底层逻辑“
📅 发布时间:2026年5月 | 🏷️ 标签:TCP/IP、网络协议、网络架构、互联网原理、网络层 🔍 SEO关键词:TCP/IP协议栈、四层模型、ARP协议、IP协议、网络通信原理开篇暴击:你正在看这篇文章&#x…...
终极解放双手:淘宝淘金币全任务自动化脚本完全指南
终极解放双手:淘宝淘金币全任务自动化脚本完全指南 【免费下载链接】taojinbi 淘宝淘金币自动执行脚本,包含蚂蚁森林收取能量,芭芭农场全任务,解放你的双手 项目地址: https://gitcode.com/gh_mirrors/ta/taojinbi 在这个数…...
3分钟上手ncmdumpGUI:网易云音乐NCM文件轻松转换的完整指南
3分钟上手ncmdumpGUI:网易云音乐NCM文件轻松转换的完整指南 【免费下载链接】ncmdumpGUI C#版本网易云音乐ncm文件格式转换,Windows图形界面版本 项目地址: https://gitcode.com/gh_mirrors/nc/ncmdumpGUI 还在为网易云音乐的NCM格式文件无法在其…...
Perplexity名言警句搜索深度解析(2024年Q2最新API行为逆向实测报告)
更多请点击: https://intelliparadigm.com 第一章:Perplexity名言警句搜索深度解析(2024年Q2最新API行为逆向实测报告) Perplexity 在 2024 年第二季度对 /search 端点实施了细粒度的请求签名验证与上下文指纹绑定机制࿰…...
Blender新手必看:别再乱点右上角那个“漏斗”了,详解大纲视图的4个隐藏开关
Blender新手避坑指南:揭秘大纲视图四大开关的实战应用 刚接触Blender时,界面右上角那个不起眼的漏斗图标就像潘多拉魔盒——点开后出现的四个神秘开关(禁用选中、视图隐藏、视图禁用、渲染禁用)让无数新手陷入选择困难。这些看似简…...
电动汽车高压系统狭窄空间高精度电流电压测量方案解析
1. 项目概述:当高压测量遇上“螺蛳壳里做道场”在电动汽车的研发测试领域,尤其是实车道路测试阶段,有一个场景让很多工程师头疼不已:如何在发动机舱、底盘或电池包附近那些错综复杂、空间逼仄的线束通道里,精准地测量高…...
非线性声学与强化学习融合的智能声学处理技术
1. 非线性声学与强化学习的融合框架解析在复杂声学环境中,传统线性声学模型往往难以应对高阶声学现象。非线性声学理论通过Westervelt方程和KZK方程等物理模型,能够准确描述声波在非线性介质中的传播特性。这些方程考虑了介质压缩性和边界反射等非线性效…...
实战指南:如何将SPIN的超像素思想,迁移到你的图像修复项目里(附思路)
超像素注意力机制在图像修复中的工程实践指南 当你在处理一张模糊的老照片时,是否曾为那些无法辨认的面部细节而苦恼?或者在增强低分辨率监控画面时,发现传统方法总是让边缘变得生硬不自然?这些问题背后,隐藏着一个被大…...
从DICOM到3D打印:手把手教你用3D Slicer处理医学影像全流程(含STL导出)
从DICOM到3D打印:医学影像处理全流程实战指南 在数字化医疗时代,将CT、MRI等医学影像转化为可触摸的3D打印模型,正在成为临床教学、手术规划和医患沟通的革命性工具。这套技术链条中最关键的桥梁,正是开源的3D Slicer平台——它能…...
