第一百六十九回 如何修改NavigationBar的形状

news2025/3/10 19:36:46

文章目录

  • 1. 概念介绍
  • 2. 使用方法
  • 3. 代码与效果
    • 3.1 示例代码
    • 3.2 运行效果
  • 4. 内容总结

我们在上一章回中介绍了"如何修改按钮的形状"相关的内容,本章回中将介绍NavigationBar组件.闲话休提,让我们一起Talk Flutter吧。

1. 概念介绍

我们在本章回中介绍的NavigationBar组件主要用来做底部导航栏,它和我们在前面章回中介绍的BottomNavigationBar组件功能相同,用法也相似,只不过在新的
Material3中,官方建议使用NavigationBar取代BottomNavigationBar,接下来我们将详细介绍它的使用方法。

2. 使用方法

和其它Widget一样,NavigationBar提供了相关的属性来控制自己,常用的属性如下:

  • height属性:用来控制该组件的高度;
  • backgroundColor属性:用来控制整个底部的背景色;
  • indicatorColor属性:用来控制标签被选中时的颜色;
  • indicatorShape属性:用来标签被选中时的形状,默认是椭圆形状;
  • selectedIndex属性:用来控制当前被选中的标签索引,默认值为0,表示第一个标签被选中;
  • onDestinationSelected属性:表示选中标签时触发的事件,它是函数类型,从函数的参数中可以得到当前被选中的标签值;
  • destinations属性:用来控制底部显示的标签,它是一个数组,数据中成员的数量就是底部标签的数量,数组类型为NavigationDestination;
    上面介绍的这些属性中大部分和BottomNavigationBar组件的属性功能类似,只是属性的名称不同。不过该组件提供了height属性来控制组件的高度,这是该组件特
    有的属性,也是十分实用的属性,因为在项目中经常需要调整底部导航栏高度。

3. 代码与效果

3.1 示例代码

介绍完Navigation组件的使用方法,我们通过具体的代码来演示它的使用方法,详细如下:

NavigationBar(
  //控制destination中Icon外围的形状,默认是16圆角矩形
  indicatorShape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(24)),
  //按钮被选中时外围的颜色
  indicatorColor: Colors.yellow,
  backgroundColor: Colors.lightBlueAccent,
  //阴影颜色,不是很明显
  shadowColor: Colors.green,
  //这个颜色在背景色后面,不设置背景色时才能看到,而且有阴影效果
  surfaceTintColor: Colors.redAccent,
  //调整高度
  height: 80,
  selectedIndex: currentIndex,
  onDestinationSelected: (index) {
    setState(() {
      currentIndex = index;
    });
  },

  //可以单独添加选择时显示的按钮
  destinations: const [
    NavigationDestination(
        icon: Icon(Icons.person),
        selectedIcon: Icon(Icons.person_2_rounded),
        label:"Person" ),
    NavigationDestination(icon: Icon(Icons.home), label: "Home"),
    NavigationDestination(icon: Icon(Icons.settings), label: "Setting"),
  ],
),

3.2 运行效果

我们在上面的代码中添加添加了详细的注释,这样有助于大家理解代码,示例代码中还有一个地方需要介绍:导航栏的图标分点击和非点击两种,默认设置的是非点击时的
图标,可以通过selectedIcon来设置点击时的图标。详细的操作可以查看示例代码。此外,NavigationBar还有一些不太常用的属性,主要是修改各种颜色,我在这
里就一一介绍了,建议大家自己动手去实践。下面是该示例程序运行后的效果图,请大家参考。

在这里插入图片描述

4. 内容总结

最后,我们对本章回的内容做一个全面的总结:

  • NavigationBar主要用来实现底部导航栏功能,它是Matirial3引入的组件;
  • BottomNavigationBar被NavigationBar替代了,不过它们的用法十分相似;
  • NavigationBar提供了相关的属性来控制自己,新引入的height属性十分实用;
  • NavigationBar在设置导航图标时提供了两个属性来控制点击和非点击状状态,有利于设置不同状态的图标;
    看官们,与"NavigationBar组件"相关的内容就介绍到这里,欢迎大家在评论区交流与讨论!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1198409.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【java进阶】集合的三种遍历(迭代器、增强for、Lambda)

目录 一、先谈集合: 二、单列集合的三种遍历方式 迭代器遍历 增强for遍历 Lambda表达式遍历 一、先谈集合: 🔥那我们平常用for循环依赖下标遍历不行嘛,这就与集合的分类有关了。 集合的体系结构: collection是单…

我的前端笔记JS

js介绍 js是编程语音,之前学的html和css是标记语言 百度搜索mdn官网就可以 语法 输出、对话框、控制台日志、输入对话框 字面量 简单理解就是看到的内容是属于什么类型,例如1232,这个是属于数字字面量

【C++】this指针讲解超详细!!!

💐 🌸 🌷 🍀 🌹 🌻 🌺 🍁 🍃 🍂 🌿 🍄🍝 🍛 🍤 📃个人主页 :阿然成长日记 …

如何用 GPTs 构建自己的知识分身?(进阶篇)

(注:本文为小报童精选文章,已订阅小报童或加入知识星球「玉树芝兰」用户请勿重复付费) 有了这些改进,你可以快速判断 GPT 助手给出的答案是真实还是「幻觉」了。 问题 在《如何用自然语言 5 分钟构建个人知识库应用&am…

【Git】Git使用Gui图形化界面,Git中SSH协议,Idea集成Git

一,Git使用Gui图形化界面 1.1 Gui的简介 Gui (Graphical User Interface)指的是图形用户界面,也就是指使用图形化方式来协同人和计算机进行交互的一类程序。它与传统的命令行界面相比,更加直观、易用,用户…

MATLAB的编程与应用,匿名函数、嵌套函数、蒙特卡洛法的掌握与使用

目录 1.匿名函数 1.1.匿名函数的定义与分类 1.2.匿名函数在积分和优化中应用 2.嵌套函数 2.1.嵌套函数的定义与分类 2.2.嵌套函数彼此调用关系 2.3.嵌套函数在积分和微分中应用 3.微分和积分 4.蒙特卡洛法 4.1.圆周率的模拟 4.2.计算N重积分(均匀分布&am…

Python与ArcGIS系列(一)ArcGIS中使用Python

目录 0 简述1 arcgis中的python窗口2 开始编写代码 0 简述 按照惯例,作为本系列专栏的第一篇,先简单地介绍下本系列文章的内容:通过python语言创建arcgis环境脚本、将脚本以工具箱形式存放在arcgis中、通过脚本自动执行地理处理、数据修复、…

Benchmarking Large Language Models in Retrieval-Augmented Generation-学习翻译

提检索增强生成中大型语言模型的基准测试文献学习 作者将在https://github.com/chen700564/RGB上发布本文的代码和RGB。 y ˇ \check{y} yˇ​ 文章目录 摘要IntroductionRelated workRetrieval-Augmented Generation BenchmarkRAG所需能力数据构建评估指标 ExperimentsSetting…

kubeadm部署k8s及高可用

目录 CNI 网络组件 1、flannel的功能 2、flannel的三种模式 3、flannel的UDP模式工作原理 4、flannel的VXLAN模式工作原理 5、Calico主要组成部分 6、calico的IPIP模式工作原理 7、calico的BGP模式工作原理 8、flannel 和 calico 的区别 Kubeadm部署k8s及高可用 1、…

Vue3 源码解读系列(四)——组件更新

组件更新 组件更新流程: 从头部开始同步 从尾部开始同步 挂载剩余的新节点 删除多余的旧节点 处理未知的子序列 当两个节点类型相同时,执行更新操作当新子节点中没有旧子节点中的某些节点时,执行删除操作当新子节点中多了旧子节点中没有…

小样本目标检测(Few-Shot Object Detection)综述

背景 前言:我的未来研究方向就是这个,所以会更新一系列的文章,就关于FSOD,如果有相同研究方向的同学欢迎沟通交流,我目前研一,希望能在研一发文,目前也有一些想法,但是具体能不能实现还要在做的过程中慢慢评估和实现.写文的主要目的还是记录,避免重复劳动,我想用尽量简洁的语言…

141.环形链表(LeetCode)

想法一 快慢指针,设置slow和fast指针,slow一次走一步,fast一次走两步,如果链表有环,它们最终会相遇,相遇时返回true;如果链表无环,它们最终走到空,跳出循环,…

计算机视觉中目标检测的数据预处理

本文涵盖了在解决计算机视觉中的目标检测问题时,对图像数据执行的预处理步骤。 首先,让我们从计算机视觉中为目标检测选择正确的数据开始。在选择计算机视觉中的目标检测最佳图像时,您需要选择那些在训练强大且准确的模型方面提供最大价值的图…

自动化测试 —— requests和selenium模块!

一、requests基于POST请求 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 #1.requests的GET与POST用法的区别: GET请求: (HTTP默认的请求方法就是GET) * 没有请求体 * 数据必须在1K之内! * GET请求数据会暴露在浏览器…

YOLOv5算法进阶改进(1)— 改进数据增强方式 + 添加CBAM注意力机制

前言:Hello大家好,我是小哥谈。本节课设计了一种基于改进YOLOv5的目标检测算法。首先在数据增强方面使用Mosaic-9方法来对训练集进行数据增强,使得网络具有更好的泛化能力,从而更好适用于应用场景。而后,为了更进一步提升检测精度,在backbone中嵌入了CBAM注意力机制模块,…

uniapp中在组件中使用被遮挡或层级显示问题

uniapp中在组件中使用或croll-view标签内使用uni-popup在真机环境下会被scroll-view兄弟元素遮挡,在开发环境下和安卓系统中可以正常显示,但在ios中出现了问题 看了许多文章都没有找到问题的原因,最后看到这一个文章http://t.csdnimg.cn/pvQ…

21.合并两个有序链表(LeetCode)

合并两个有序链表,是链表的经典题之一 ,这里给出一种经典解法 想法一 创建head和tail两个指针,从头比较两个链表,取小的尾插,注意一开始指针的初始化,接着就是不断利用tail指针,链接比较之中较…

C语言----静态链接库和动态链接库

在前面的文章中讲到可执行程序的生成需要经过预处理,编译,汇编和链接四个步骤,链接阶段是链接器将该目标文件与其他目标文件、库文件、启动文件等链接起来生成可执行文件。 需要解读一下库文件,我们可以将库文件等价为压缩包文件&…

AIGC ChatGPT 4 轻松实现小游戏开发制作

贪吃蛇的小游戏相信大家都玩儿过,我们让ChatGPT4来帮我们制作一个贪吃蛇的小游戏。 在ChatGPT中发送Prompt如下图: 完整代码如下: <!DOCTYPE html> <html> <head> <title>贪吃蛇游戏</title> <style type="text/css"> #can…

电脑小Tip---外接键盘F1-F12快捷键与笔记本不同步

当笔记本外接一款非常好用的静音键盘后&#xff0c;会出现一些问题。例如&#xff1a;外接键盘F1-F12与笔记本不同步。具体一个例子就是&#xff0c;在运行matlab程序时&#xff0c;需要点编辑器—运行&#xff0c;这样就很麻烦&#xff0c;直接运行的快捷键是笔记本键盘上的F5…