news 2026/6/23 19:02:03

21天学会OpenHarmony跨平台开发 - windows + Flutter【Day8】

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
21天学会OpenHarmony跨平台开发 - windows + Flutter【Day8】

昨天把底部导航栏外观完成了,但是点击还不能切换,今天把点击功能添加上,并且完善浏览区。

BottomNavigationBar 组件自带 onTap 方法并自动传入当前点击的 index,需要定义一个存放导航栏按钮索引的变量,在无状态类中添加变量、补充onTap方法即可:

class _MainPageState extends State<MainPage> { // 本节关键代码 // 存放点击索引 int _currentIndex = 0; // 底部导航条定义好了基本不会变,所以声明 final final List<TabListItem> _tabList = [ TabListItem( icon: Icon(Icons.home, color: Colors.grey), activeIcon: Icon(Icons.home, color: Colors.black), text: "首页" ), TabListItem( icon: Icon(Icons.shopping_cart, color: Colors.grey), activeIcon: Icon(Icons.shopping_cart, color: Colors.black), text: "购物车" ), TabListItem( icon: Icon(Icons.person, color: Colors.grey), activeIcon: Icon(Icons.person, color: Colors.black), text: "我的" ), ]; List<BottomNavigationBarItem> _getTabBarWidget() { return List.generate(_tabList.length, (int index) { return BottomNavigationBarItem( icon: _tabList[index].icon, activeIcon: _tabList[index].activeIcon, label: _tabList[index].text, ); }); } @override Widget build(BuildContext context) { return Scaffold( body: Center(child: Text("主页")), bottomNavigationBar: BottomNavigationBar( items: _getTabBarWidget(), // 本节关键代码 onTap: (int index) { _currentIndex = index; setState(() {}); }, currentIndex: _currentIndex, ), ); } }

接下来处理显示区域,显示区域都需要避开屏幕上方挖孔或者刘海,下方要显示内容要避开昨天做得导航栏,以便于完整显示。正好 Flutter 有自动处理这些问题的组件:SafeArea() 用于设置显示安全区域。另外,每个导航功能的页面是堆叠放置,每点击一个导航按钮,把堆叠的页面置顶就可以显示出来了,可以用一个组件处理堆叠:IndexedStack(),把 Scaffold() 下面的 body: Center() 组件替换为 SafeArea() 。

IndexedStack() 里面有一个 children:[] 属性,我们同样用函数来处理子 widget ;再把导航栏点击获取的 index 变量传过来赋值给 index 属性就可以控制页面堆叠显示了。

三个页面,组件比较多,来建立三个目录:Home,Cart,Info,每个目录下面建立 index.dart 每个页面都使用有状态组件,如下:

代码如下:

// 本节关键代码 List<Widget> _getChildren() { return [ HomeView(), CartView(), InfoView(), ]; } @override Widget build(BuildContext context) { return Scaffold( // 本节关键代码 body: SafeArea(child: IndexedStack( index: _currentIndex, // 配合点击传来的 index 变量 children: _getChildren(), )), bottomNavigationBar: BottomNavigationBar( items: _getTabBarWidget(), onTap: (int index) { _currentIndex = index; setState(() {}); }, currentIndex: _currentIndex, ), ); } }

点击导航栏,显示对应页面,完成效果:

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/23 21:03:47

快速验证:基于CentOS 7.6的测试环境搭建

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容&#xff1a; 开发一个快速搭建CentOS 7.6测试环境的工具。功能包括&#xff1a;一键下载最小化镜像&#xff0c;自动创建虚拟机(支持VirtualBox和VMware)&#xff0c;预装常用开发工具。提供环境…

作者头像 李华
网站建设 2026/6/23 21:02:47

AI定价实战指南:快速构建电商智能定价系统

在当今竞争激烈的电商环境中&#xff0c;传统的统一价格策略已经无法满足多样化的市场需求。AI定价和个性化策略正成为电商企业提升竞争力的核心武器。面对海量用户数据、实时市场变化和复杂的定价因素&#xff0c;如何快速构建一个智能、灵活且高效的定价系统&#xff1f; 【免…

作者头像 李华
网站建设 2026/6/23 21:02:22

VGGT三维重建终极指南:从零开始构建你的3D世界

VGGT三维重建终极指南&#xff1a;从零开始构建你的3D世界 【免费下载链接】vggt VGGT Visual Geometry Grounded Transformer 项目地址: https://gitcode.com/gh_mirrors/vg/vggt 还在为复杂的三维重建技术望而却步吗&#xff1f;VGGT&#xff08;Visual Geometry Grou…

作者头像 李华
网站建设 2026/6/23 21:02:14

电商网站秒开秘籍:快马AI加载优化案例

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容&#xff1a; 开发一个电商网站加载优化解决方案&#xff0c;针对商品详情页进行专项优化。功能包括&#xff1a;1. 智能图片懒加载组件 2. 关键CSS内联生成器 3. 异步加载非核心JS 4. 基于用户设…

作者头像 李华
网站建设 2026/6/23 0:07:22

15分钟快速验证:谷歌服务离线包生成器原型开发

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容&#xff1a; 开发一个谷歌离线安装包生成器的最小可行产品(MVP)&#xff0c;核心功能包括&#xff1a;1.产品选择下拉菜单 2.版本选择器 3.一键生成下载脚本 4.简易进度显示。使用HTMLJavaScrip…

作者头像 李华
网站建设 2026/6/23 19:46:26

1小时搞定ElementUI原型:快马平台实战

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容&#xff1a; 快速生成一个企业OA系统的前端原型&#xff0c;使用Vue3ElementUITypeScript&#xff0c;包含&#xff1a;1.登录界面&#xff1b;2.主界面布局&#xff08;顶部导航侧边栏&#xf…

作者头像 李华