Flutter底部导航栏插件persistent_bottom_nav_bar的使用

flutter 框架中的 persistent_bottom_nav_bar 插件可以让我们快速实现页面底部导航栏(也就是 bottomNavigationBar )的布局且能拥有多样的切换效果(包括但不限于:动画切换效果、中间凸起按钮效果等)

插件网址:persistent_bottom_nav_bar

 下面简单演示下该插件的使用步骤:

下载安装

官方网址中也有下载相关的介绍,推荐可以查看官方的。插件的下载可以通过终端直接命令行下载也可以在 pubspec.yaml 中添加上插件名称和版本保存自动下载

终端命令

flutter pub add persistent_bottom_nav_bar

在 pubspec.yaml 中添加插件让IDE自动帮我们下载(注意版本号直接访问插件网址查看最新的下载使用)

dependencies:persistent_bottom_nav_bar: ^5.0.2

配置样式以及导航栏对应的页面

tip:推荐可以单独创建一个 .dart 文件来抽离配置底部导航栏样式以及每个导航栏点击要跳转的页面,比如创建一个 myTabbar.dart 的文件,然后贴入如下代码(注:这个代码是配置完整的示例代码,可以直接复制然后根据提示将引入的页面和路径进行修改即可)

import 'package:flutter/material.dart';
import 'package:persistent_bottom_nav_bar/persistent_tab_view.dart';// 这里是导入底部每个 tabbar 项点击要跳转的页面(根据自己项目需要创建再按路径引入即可)
import './pages/home.dart';
import './pages/message.dart';
import './pages/setting.dart';
import './pages/user.dart';class MyTabbar extends StatelessWidget {const MyTabbar({super.key});@overrideWidget build(BuildContext context) {final controller = PersistentTabController(initialIndex: 0);return PersistentTabView(context,controller: controller,screens: _buildScreens(),   // 列表 Widget 列表items: _navBarsItems(),     // tabbar 的 items 列表confineInSafeArea: true,backgroundColor: Colors.white, // Default is Colors.white.handleAndroidBackButtonPress: true, // Default is true.resizeToAvoidBottomInset:true, // This needs to be true if you want to move up the screen when keyboard appears. Default is true.stateManagement: true, // Default is true.hideNavigationBarWhenKeyboardShows:true, // Recommended to set 'resizeToAvoidBottomInset' as true while using this argument. Default is true.decoration: NavBarDecoration(borderRadius: BorderRadius.circular(10.0),colorBehindNavBar: Colors.white,),popAllScreensOnTapOfSelectedTab: true,popActionScreens: PopActionScreensType.all,itemAnimationProperties: const ItemAnimationProperties(// Navigation Bar's items animation properties.duration: Duration(milliseconds: 200),curve: Curves.ease,),screenTransitionAnimation: const ScreenTransitionAnimation(// Screen transition animation on change of selected tab.animateTabTransition: true,curve: Curves.ease,duration: Duration(milliseconds: 200),),navBarStyle:NavBarStyle.style1, // style1 可改成 style1 到 style19 中的一个,每个效果不同可参考插件官方示例或自己修改查看效果);}List<Widget> _buildScreens() {// 注意:这个列表里面的页面的放置顺序要和 _navBarsItems 配置的顺序保持一致return const [MyHomePage(), // 放 首页 的类名MessagePage(), // 放 消息页 的类名SettingPage(), // 放 设置页 的类名UserPage(), // 放 我的 的类名];}List<PersistentBottomNavBarItem> _navBarsItems() {Color activeColor = Colors.red;Color inactiveColor = Colors.grey;return [PersistentBottomNavBarItem(icon: const Icon(Icons.home),title: ("首页"),activeColorPrimary: activeColor,inactiveColorPrimary: inactiveColor,),PersistentBottomNavBarItem(icon: const Icon(Icons.message),title: ("消息"),activeColorPrimary: activeColor,inactiveColorPrimary: inactiveColor,),PersistentBottomNavBarItem(icon: const Icon(Icons.settings),title: ("设置"),activeColorPrimary: activeColor,inactiveColorPrimary: inactiveColor,),PersistentBottomNavBarItem(icon: const Icon(Icons.person),title: ("我的"),activeColorPrimary: activeColor,inactiveColorPrimary: inactiveColor,),];}
}

使用配置好的文件

在本来要配置底部导航栏的页面引入我们配置好的 myTabbar.dart 文件(比如 main.dart 文件中)

// 引入我们配置好的 tabbar 文件(注意个人的路径)
import './mytabbar.dart';

MyTabbar() 组件放到 页面的 Scaffold 组件中与 bottomNavigationBar 属性相对应即可:

// ... 其他代码
return const Scaffold(bottomNavigationBar: MyTabbar(),      // 使用 MyTabbar 控件自定义 bottomNavigationBar 效果);
// ... 其他代码

运行查看效果

最后就可以重新运行项目查看配置好的底部导航栏效果了,如图示例:

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

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

相关文章

【MySQL·8.0·源码】subquery 子查询处理分析(一)

引言 在 SQL 中&#xff0c;子查询属于 Nested Query 的一种形式&#xff0c;根据 Kim 的分类[1]&#xff0c;Nested Query 即嵌套查询是一种 SQL-like 形式的查询语句嵌套在另一 SQL 中&#xff0c;SQL-like 的嵌套子句可以出现在 SELECT、FROM 和 WHERE 子句的任意位置。 在…

GBASE南大通用分享如何更新row类型表达式

从 SPL 例程内&#xff0c;您可使用 ROW 变量来更新 row 类型表达式。下图展示当员工的基本薪 酬按某一百分比增长时&#xff0c;用于更新 emp_info 表的 SPL 过程 emp_raise。 用于更新 emp_info 表的 SPL 过程。 SELECT 语句将来自 emp_info 表的 salary 列的行选择到 ROW …

Java项目:125SpringBoot教室预约管理系统

博主主页&#xff1a;Java旅途 简介&#xff1a;分享计算机知识、学习路线、系统源码及教程 文末获取源码 一、项目介绍 教室预约管理系统使用SpringBootMybatis进行开发&#xff0c;系统整体分为前台和后台&#xff0c;后台主要对教室&#xff0c;用户等信息进行管理&#xf…

SpringBoot+MyBatis使用pagehelper分页插件及其注意事项(含解决分页不生效问题)

1 前言 近期在做项目的时候&#xff0c;遇到了一个问题&#xff1a;在使用MyBatis的分页插件&#xff08;pagehelper&#xff09;时&#xff0c;发现其分页不生效&#xff0c;找了许多方法才得以解决&#xff0c;故写下这篇文章记录一下&#xff0c;帮助跟我遇到同样问题的同学…

无人机航迹规划(六):七种元启发算法(DBO、LO、SWO、COA、LSO、KOA、GRO)求解无人机路径规划(提供MATLAB代码)

一、七种算法&#xff08;DBO、LO、SWO、COA、LSO、KOA、GRO&#xff09;简介 1、蜣螂优化算法DBO 蜣螂优化算法&#xff08;Dung beetle optimizer&#xff0c;DBO&#xff09;由Jiankai Xue和Bo Shen于2022年提出&#xff0c;该算法主要受蜣螂的滚球、跳舞、觅食、偷窃和繁…

阿赵UE学习笔记——解决UE资源不能正常显示缩略图的问题

阿赵UE学习笔记目录 大家好&#xff0c;我是阿赵。   这里分享一个虚幻引擎使用小技巧。在使用虚幻引擎的过程中&#xff0c;经常会遇到有些资源在重新打开项目的时候&#xff0c;会看不到缩略图&#xff0c;而是显示默认资源的图标&#xff1a; 这个时候&#xff0c;第一种…

java web mvc-06-play framework intro

拓展阅读 Spring Web MVC-00-重学 mvc mvc-01-Model-View-Controller 概览 web mvc-03-JFinal web mvc-04-Apache Wicket web mvc-05-JSF JavaServer Faces web mvc-06-play framework intro web mvc-07-Vaadin web mvc-08-Grails 开源 The jdbc pool for java.(java …

每日一题——LeetCode1331.数组序号转换

方法一 排序哈希Map 首先用一个数组保存排序完的原数组&#xff0c;然后用一个哈希表保存各元素的序号&#xff0c;最后将原属组的元素替换为序号后返回。 var arrayRankTransform function(arr) {let set new Set(arr)let sortArrArray.from(set).sort((a,b)>a-b)let ma…

对Vue有状态组件和无状态组件的理解及使用场景

目录 一、Vue框架 二、Vue的有状态组件 三、Vue的无状态组件 四、有状态组件和无状态组件的区别 一、Vue框架 Vue是一款流行的JavaScript框架&#xff0c;用于构建用户界面。它被设计为易学易用的&#xff0c;同时也具备强大的功能和灵活性。 Vue具有以下特点&#xff1a…

【AI视野·今日NLP 自然语言处理论文速览 第七十五期】Thu, 11 Jan 2024

AI视野今日CS.NLP 自然语言处理论文速览 Thu, 11 Jan 2024 Totally 36 papers &#x1f449;上期速览✈更多精彩请移步主页 Daily Computation and Language Papers Leveraging Print Debugging to Improve Code Generation in Large Language Models Authors Xueyu Hu, Kun K…

03 SpringBoot实战 -微头条之首页门户模块(跳转某页面自动展示所有信息+根据hid查询文章全文并用乐观锁修改阅读量)

1.1 自动展示所有信息 需求描述: 进入新闻首页portal/findAllType, 自动返回所有栏目名称和id 接口描述 url地址&#xff1a;portal/findAllTypes 请求方式&#xff1a;get 请求参数&#xff1a;无 响应数据&#xff1a; 成功 {"code":"200","mes…

Linux中Iptables使用

概念&#xff1a;网络中的防火墙&#xff0c;是一种将内部网络和外部网络分开的方法&#xff0c;是一种隔离技术 作用&#xff1a; 防火墙在内网与外网通信时进行访问控制&#xff0c;依据所设置的规则对数据包作出判断&#xff0c;最大限度地阻止网络中的黑客破坏企业网络&…

MYSQL数据库基本操作-DQL-基本查询

一.概念 数据库管理系统一个重要功能就是数据查询。数据查询不应是简单返回数据库中存储的数据&#xff0c;还应该根据需要对数据进行筛选以及确定数据以什么样的格式显示。 MySQL提供了功能强大&#xff0c;灵活的语句来实现这些操作。 MySQL数据库使用select语句来查询数据…

【学术论文写作】 鲁棒性实验写作的行文逻辑

文章目录 一、声明二、行文思路三、示例范文一范文二 一、声明 自己总结的&#xff0c;有问题望指正&#xff01; 二、行文思路 为什么要做鲁棒性测试怎么做实验结论对结果的解释 三、示例 PPT 范文一 2022, TIM, “A Robust and Reliable Point Cloud Recognition Netw…

GPT-5不叫GPT-5?下一代模型会有哪些新功能?

OpenAI首席执行官奥特曼在上周三达沃斯论坛接受媒体采访时表示&#xff0c;他现在的首要任务就是推出下一代大模型&#xff0c;这款模型不一定会命名GPT-5。虽然GPT-5的商标早已经注册。 如果GPT-4目前解决了人类任务的10%&#xff0c;GPT-5应该是15%或者20%。 OpenAI从去年开…

【JavaEE进阶】 MyBatis使用XML实现增删改查

文章目录 &#x1f38d;前言&#x1f340;配置连接字符串和MyBatis&#x1f343;写持久层代码&#x1f6a9;添加mapper接⼝&#x1f6a9;添加UserInfoXMLMapper.xml&#x1f6a9;单元测试 &#x1f334;增(Insert&#xff09;&#x1f6a9;返回⾃增id &#x1f38b;删(Delete)&…

【Vue3】组件通信

Vue3组件通信和Vue2的区别&#xff1a; 移出事件总线&#xff0c;使用mitt代替。vuex换成了pinia。把.sync优化到了v-model里面了。把$listeners所有的东西&#xff0c;合并到$attrs中了。$children被砍掉了。 1. props 若 父传子&#xff1a;属性值是非函数。若 子传父&…

泡泡玛特旗下IP亮相2024米兰时装周 LABUBU等化身时尚观察员​

2024年1月14日&#xff0c;在意大利米兰时装周上&#xff0c;泡泡玛特旗下IP THE MONSTERS成员LABUBU、ZIMOMO惊艳亮相PRONOUNCE珀琅汐2024秋冬大秀现场&#xff0c;作为时尚观察员的LABUBU和ZIMOMO以其独特的潮玩形象打动了顶级时尚圈。 据了解&#xff0c;泡泡玛特和PRONOUNC…

Qt简介及安装

“这不属于我&#xff0c;因为沉默背后也有冲动” 在互联网当中&#xff0c;最关注的几个比较核心的岗位&#xff1a; &#x1f6f6; 后端开发 &#x1f6f6; 前端开发 &#x1f6f6; 算法工程师 &#x1f6f6; 游戏开发 像后端开发中有认识…

VUE+Vis.js鼠标悬浮title提前显示BUG解决方法

在使用VUEVis.js做拓扑图&#xff0c;利用鼠标悬浮放在图标展示设备信息时&#xff0c;发现鼠标一放在图标上面时&#xff0c;标题表会提前在放置的元素下显示&#xff0c;鼠标再放到图标上去元素才会隐藏变成悬浮状态 解决方法&#xff1a; 添加一个div元素&#xff0c;设置v…