flutter开发实战-底部bottomNavigationBar➕PageView

flutter开发实战-底部bottomNavigationBar

tabbar在app中非常常见,底部BottomNavigationBar属性

在这里插入图片描述
在这里插入图片描述

一、BottomNavigationBar属性

BottomNavigationBar组件的常用属性:

  • type:tabbar样式,默认为白色不显示;
  • fixedColor:tabbar选中颜色;
  • currentIndex:当前选中的Item的index
  • selectedFontSize:选中的title的size (默认14.0)
  • unselectedFontSize:未选中的title的size (默认12.0)
  • backgroundColor:背景色
  • iconSize:icon图片的size (默认是24.0)
  • items

二、代码实现

这里我代码进行了拆分。

2.1、main_sub_pages.dart代码

main_sub_pages.dart

List<Widget> mainPages = <Widget>[HomePage(),QrScanEntryPage(),MinePage(),
];List<String> mainRouterNames = <String>[RouterName.home,RouterName.scanEntry,RouterName.mine,
];

2.2、main_tab_navigator.dart代码

main_tab_navigator.dart

// 在MainTabNavigator中,使用到了PageView.builder

PageView 是一个非常重要的组件,因为在移动端开发中很常用,比如大多数 App 都包含 Tab 换页效果、图片轮动以及抖音上下滑页切换视频功能等等

class MainTabNavigator extends StatefulWidget {const MainTabNavigator({Key? key}) : super(key: key);State<MainTabNavigator> createState() => _MainTabNavigatorState();
}class _MainTabNavigatorState extends State<MainTabNavigator> {PageController _pageController = PageController();int _selectedIndex = 0;late DateTime _lastPressed;List<Widget> subMainPages = [];void initState() {// 检查app更新checkAppUpdate();// 设置默认的subMainPages = mainPages;super.initState();}void checkAppUpdate() {}Widget build(BuildContext context) {return Scaffold(resizeToAvoidBottomInset: false,body: WillPopScope(onWillPop: () async {if (_lastPressed == null ||DateTime.now().difference(_lastPressed) > Duration(seconds: 1)) {//两次点击间隔超过1秒则重新计时_lastPressed = DateTime.now();return false;}return true;},child: PageView.builder(itemBuilder: (BuildContext context, int index) {return KeepAliveWrapper(child: subMainPages[index], keepAlive: true);},itemCount: subMainPages.length,controller: _pageController,physics: NeverScrollableScrollPhysics(),onPageChanged: (index) {setState(() {_selectedIndex = index;});},),),bottomNavigationBar: BottomNavigationBar(type: BottomNavigationBarType.fixed,items: <BottomNavigationBarItem>[BottomNavigationBarItem(icon: Icon(Icons.home_outlined),label: S.of(context).home,),BottomNavigationBarItem(icon: Icon(Icons.qr_code_scanner_outlined),label: S.of(context).qrScan,),BottomNavigationBarItem(icon: Icon(Icons.nature_outlined),label: S.of(context).mine,),],currentIndex: _selectedIndex,onTap: (index) {_pageController.jumpToPage(index);},),);}
}

2.2、main_page.dart代码

main_page.dart

class MainPage extends StatefulWidget {const MainPage({Key? key}) : super(key: key);State<MainPage> createState() => _MainPageState();
}class _MainPageState extends State<MainPage> {Widget build(BuildContext context) {return Scaffold(body: MainTabContainer(),);}
}class MainTabContainer extends StatefulWidget {const MainTabContainer({Key? key}) : super(key: key);State<MainTabContainer> createState() => _MainTabContainerState();
}class _MainTabContainerState extends State<MainTabContainer> {Widget build(BuildContext context) {return MainTabNavigator();}
}

2.3、在App入口页面设置

return MaterialApp(theme: ThemeData(fontFamily: "PingFang SC",primarySwatch: themeModel.theme,),navigatorKey: OneContext().key,debugShowCheckedModeBanner: false,supportedLocales: S.delegate.supportedLocales,locale: localeModel.getLocale(),initialRoute: RouterName.main,	// 默认mainonGenerateRoute: RouterManager.generateRoute,
);

这里在router_manager配置main

class RouterManager {// ignore: missing_returnstatic Route<dynamic> generateRoute(RouteSettings settings) {LoggerManager().debug("generateRoute: ${settings}, name:${settings.name}");switch (settings.name) {case RouterName.agreement:{return NoAnimRouteBuilder(const ProtocolAgreementPage());}break;case RouterName.main:{return NoAnimRouteBuilder(const MainPage());}break;default:return MainTabNavigator();}}
}

至此实现了flutter开发实战-底部bottomNavigationBar➕PageView,tabbar切换效果

三、小结

flutter开发实战-底部bottomNavigationBar➕PageView,tabbar切换效果,配置MaterialApp的onGenerateRoute与initialRoute。

学习记录,每天不停进步。

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

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

相关文章

SkipList

文章目录 SkipList理解跳表从单链表说起查找的时间复杂度空间复杂度插入数据更高效的方式维护索引代码实现索引的抽取概率算法 举例插入元素 删除数据总结为什么Redis选择使用跳表而不是红黑树来实现有序集合 SkipList 理解跳表从单链表说起 在原始单链表中查找元素&#xff…

JavaScript--修改 HTML 元素

这些是一些用于修改 HTML 元素的常见方法&#xff1a; 1、document.createElement(element)&#xff1a;创建 HTML 元素节点。可以使用这个方法创建一个新的 HTML 元素&#xff0c; 例如 document.createElement(div) 将创建一个 <div> 元素节点。 2、document.createA…

【探索AI未来】人工智能技术在软件开发中的应用与革新

自我介绍⛵ &#x1f4e3;我是秋说&#xff0c;研究人工智能、大数据等前沿技术&#xff0c;传递Java、Python等语言知识。 &#x1f649;主页链接&#xff1a;秋说的博客 &#x1f4c6; 学习专栏推荐&#xff1a;人工智能&#xff1a;创新无限、MySQL进阶之路、C刷题集、网络安…

postgresql还原bak

1、第一步肯定是要新建自己还原的目标数据库&#xff0c;例如&#xff1a; 2、进入postgresql的安装目录下的bin目录下 然后地址栏输入cmd进入命令 输入以下 psql -h localhost -U postgres -p 5432 -d SamsinoYardStandard_karamay -f "D:\desktop\zk\20230628.bak&quo…

VQA评测evaluation代码:gqa / aokvqa / vqav2 / scienceQA

VQA评测分多种&#xff0c;这里提几种&#xff0c;代码参考来自lavis和mmpretrain。 一、gqa评测&#xff08;只有一个answer&#xff09; 数据集下载及格式&#xff1a; blip中json地址 图片下载 # gqa格式已重新整理&#xff0c;特点是每个question对应的gt_answers只有一…

Python自动化之pytest常用插件

目录 1、失败重跑 pytest-rerunfailures 2、多重校验 pytest-assume 3、设定执行顺序 pytest-ordering 4、用例依赖&#xff08;pytest-dependency&#xff09; 5.分布式测试(pytest-xdist) 6.生成报告&#xff08;pytest-html&#xff09; 1、失败重跑 pytest-rerunfailu…

Unity游戏源码分享-Unity5.4.1打砖块游戏Breakout_Game_Starter_Kit

Unity5.4.1打砖块游戏Breakout_Game_Starter_Kit 童年的回忆 项目地址&#xff1a;https://download.csdn.net/download/Highning0007/88042779Unity游戏源码分享-

SpringCloud——消息总线Bus

SpringCloud Bus将分布式系统的节点与轻量级消息系统链接起来的框架&#xff0c;是对SpringCloud Config的加强&#xff0c;广播自动版的配置。 支持两种消息代理&#xff1a;RabbitMQ和Kafka 一、创建工程&#xff0c;添加依赖 spring-cloud-starter-config spring-cloud-st…

(转载)从0开始学matlab(第1天)—变量和数组

MATLAB 程序的基本数据单元是数组。一个数组是以行和列组织起来的数据集合&#xff0c;并且拥有一个数组名。数组中的单个数据是可以被访问的&#xff0c;访问的方法是数组名后带一个括号&#xff0c;括号内是这个数据所对应行标和列标。标量在 MATLAB 中也被当作数组来处理——…

centos 配置好网络后无法ping 通百度

问题&#xff1a; ping 自己配置的ip地址能够ping通&#xff0c;ping 连接的WiFi &#xff08;可以上外网&#xff09;地址也能ping通&#xff0c;但是ping www.baidu.com 却ping不同&#xff1b; 配置 处理方法&#xff1a; 我的虚拟机开通了三张网卡&#xff0c;150段…

GB35114双向身份认证(A级)学习笔记

GB35114双向身份验证学习笔记 温故而知新 SSL单向认证 摘录自&#xff1a;https://blog.csdn.net/qq_45759354/article/details/128672828 SSL协议用到了对称加密和非对称加密&#xff0c;在建立连接时&#xff0c;SSL首先对对称加密密钥使用非对称加密。连接建立好后&…

【量化课程】02_1.宏观经济学基础概念

2.1_宏观经济学基础概念 文章目录 2.1_宏观经济学基础概念1. 宏观经济简单背景1.1 微观经济学时期1.2 宏观经济学开端1.3 宏观经济学研究的问题1.4 宏观经济与理财的联系 2. 宏观经济分析及关键指标2.1 教材中的宏观经济分析框架和指标2.1.1 国内生产总值GDP2.1.2 边际消费倾向…