当前位置: 首页 > news >正文

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, ), ); } }

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

http://www.jsqmd.com/news/87859/

相关文章:

  • PPT-图文排版功能
  • AlDente电池管理神器:新手也能轻松掌握的MacBook电池保养秘诀
  • 企业级应用:Linux服务器自动下载备份方案
  • 用AI快速生成EmuELEC游戏系统配置脚本
  • 完整教程:MySQL: 存储引擎深度解析:CSV与Archive的特性、应用与实战演示
  • TradingAgents-CN智能交易系统终极指南:AI金融决策完整解析
  • 1小时打造DroidCam智能门铃原型
  • Armbian网络配置终极指南:从零到精通的完整解决方案
  • ESP8266引脚图超详细图解:小白也能看懂
  • bilili:2025终极B站视频下载神器!一键保存番剧/投稿视频+弹幕
  • 1小时速成:用AI打造直播平台概念验证
  • RecyclerView性能优化:彻底解决图片加载闪烁的深度剖析与实战方案
  • Docker容器中D-Bus连接问题的5种解决方案
  • 腾讯开源SongPrep-7B:音乐AI预处理框架革新,端到端解析全歌曲结构
  • Windows 10/11系统HEVC解码难题终极解决方案
  • 【李沐 | 动手实现深度学习】8 实战:Kaggle房价预测
  • 3分钟搞定SSL证书错误:开发者效率指南
  • 专业文章仿写创作指南
  • 如何用AI自动修复D-Bus连接错误
  • AI写论文哪个软件最好?我测评了7款,发现“全能战士”是它!宏智树ai
  • 企业IT实战:批量部署谷歌软件的离线解决方案
  • AI如何帮你快速掌握curl命令?
  • GPT-OSS-Safeguard-20B:开源AI安全推理模型重构内容审核范式
  • AI写论文哪个软件最好?宏智树AI:学术写作的“六边形战士”来袭!
  • 彻底掌握!5步解决AMD显卡风扇控制不稳定的终极指南
  • 告别手动计算!快马AI自动取整效率提升300%
  • 编程小白必看:3分钟学会向上取整的5种方法
  • 告别USB线!无线DroidCam办公效率提升300%
  • 190亿参数开源模型CogVLM2:多模态AI普惠革命的里程碑
  • Downkyi登录失败的5种常见场景及解决方案