Flutter NavigationBar 优雅的实现底部导航栏菜单

﹏ヽ暗。殇╰゛Y 2023-10-07 20:56 132阅读 0赞

程序员如果敲一会就停半天,抱着一杯茶,表情拧巴,那才是在编程,在之前我要实现一级标签效果,我还在苦苦写了好多嵌套的代码,当我看到 Clip 时,泪奔啊,原来一个组件就可以实现,所以从事Flutter开发的小伙伴可以瞅瞅效果,万一用上呢 。

重要消息

  • flutter从入门 到精通 系列文章

本文章实现的效果如下:
在这里插入图片描述

在Flutter开发中NavigationBar 学用来配置底部菜单栏选项。

1 页面的主体是继承于StatefulWidget

StatefulWidget是一个可以更新页面显示样式的Widget,在Flutter开发中,如果未使用到状态管理框架如Getx这一类的内容,那么开发的所有的页面,只要涉及到页面中有数据更新,就需要使用StatefulWidget。

  1. class NavaHomePage1 extends StatefulWidget {
  2. @override
  3. State<StatefulWidget> createState() {
  4. return _NavaHomePageState();
  5. }
  6. }
  7. class _NavaHomePageState extends State<NavaHomePage1> {
  8. ///当前显示的页面角标
  9. int _currentIndex = 0;
  10. @override
  11. Widget build(BuildContext context) {
  12. return Scaffold(
  13. appBar: AppBar(
  14. title: Text("底部导航"),
  15. ),
  16. body: Text("这里是body $_currentIndex"),
  17. //底部导航栏
  18. bottomNavigationBar: NavigationBar(
  19. //菜单组
  20. destinations: navigationList,
  21. //当前选中的
  22. selectedIndex:_currentIndex ,
  23. //选择点击事件
  24. onDestinationSelected: (int index){
  25. setState(() {
  26. _currentIndex = index;
  27. });
  28. },
  29. //背景颜色
  30. backgroundColor: Colors.white,
  31. //表面覆盖的一层浅色
  32. surfaceTintColor: Colors.red,
  33. ),
  34. );
  35. }
  36. ...
  37. }

Scaffold 意为脚手架,在Flutter开发中,可以理解为页面的结构组件,一个空的页面,基本都是以Scaffold来布局。

Scaffold的属性appBar配置的是页面的顶部标题。

Scaffold的属性body配置的是页面中间显示的内容主体,在本实例中显示的是一个简单的文本,读者可以替换为对应的具体的实现页页面。

Scaffold的属性bottomNavigationBar配置的就是页面的底部的导航栏菜单,这里使用了NavigationBar,NavigationBar中destinations属性用来配置菜单选项,要求最少有两个子菜单选项,本实现中定义如下:

  1. static const List<NavigationDestination> navigationList = [
  2. NavigationDestination(
  3. tooltip: "",
  4. icon: Icon(Icons.widgets_outlined),
  5. label: "菜单",
  6. selectedIcon: Icon(Icons.widgets),
  7. ),
  8. NavigationDestination(
  9. tooltip: "",
  10. icon: Icon(Icons.file_open_outlined),
  11. label: "发现",
  12. selectedIcon: Icon(Icons.file_open),
  13. ),
  14. NavigationDestination(
  15. tooltip: "",
  16. icon: Icon(Icons.text_fields),
  17. label: "列表",
  18. selectedIcon: Icon(Icons.text_fields_outlined),
  19. ),
  20. NavigationDestination(
  21. tooltip: "",
  22. icon: Icon(Icons.people_alt_outlined),
  23. label: "我的",
  24. selectedIcon: Icon(Icons.people),
  25. )
  26. ];

完毕

发表评论

表情:
评论列表 (有 0 条评论,132人围观)

还没有评论,来说两句吧...

相关阅读

    相关 底部导航

    1.添加相应的文件 2.分别加入4个Fragment以及布局文件 3.MianActivity的引用 4.MainActivity的布局文件   添加相应的文件: