美文网首页Flutter UI
Flutter底部导航

Flutter底部导航

作者: itfitness | 来源:发表于2021-11-16 11:55 被阅读0次

    目录

    效果展示


    实现步骤

    1.创建切换的三个页面

    这里由于其他两个页面只是显示的文字不一样因此我这里就只展示一个页面的代码

    import 'package:flutter/material.dart';
    
    class HomePage extends StatefulWidget {
      HomePage({Key? key}) : super(key: key);
    
      @override
      _HomePageState createState() => _HomePageState();
    }
    
    class _HomePageState extends State<HomePage> {
      @override
      Widget build(BuildContext context) {
        return Center(
          child: Text("首页"),
        );
      }
    }
    
    2.添加BottomNavigationBar

    这里实现底部导航是用的BottomNavigationBar,因此我们需要在主页面中加入BottomNavigationBar,代码如下(注意:要在Scaffold中添加)

    import 'package:bottomnavigationbar_demo/pages/HomePage.dart';
    import 'package:bottomnavigationbar_demo/pages/MinePage.dart';
    import 'package:bottomnavigationbar_demo/pages/OrderPage.dart';
    import 'package:flutter/material.dart';
    
    void main()=>runApp(const MyApp());
    
    class MyApp extends StatelessWidget {
      const MyApp({Key? key}) : super(key: key);
      @override
      Widget build(BuildContext context) {
        return MaterialApp(
          title: 'Flutter Demo',
          theme: ThemeData(
            primarySwatch: Colors.blue,
          ),
          home: MainPage(),
        );
      }
    }
    
    class MainPage extends StatefulWidget {
      MainPage({Key? key}) : super(key: key);
    
      @override
      _MainPageState createState() => _MainPageState();
    }
    
    class _MainPageState extends State<MainPage> {
      var pages = [HomePage(),OrderPage(),MinePage()];
      var currentIndex = 0;
      @override
      Widget build(BuildContext context) {
        return Scaffold(
          appBar: AppBar(
            title: Text("底部导航"),
          ),
          body: pages[currentIndex],
          bottomNavigationBar: BottomNavigationBar(
            currentIndex: currentIndex,
            type: BottomNavigationBarType.fixed,
            onTap: (index){
              setState(() {
                currentIndex = index;
              });
            },
            items: [
              BottomNavigationBarItem(
                backgroundColor: Colors.pink,
                icon: Icon(Icons.home),
                label: "首页"
              ),
              BottomNavigationBarItem(
                backgroundColor: Colors.green,
                icon: Icon(Icons.list),
                label: "订单"
              ),
              BottomNavigationBarItem(
                backgroundColor: Colors.orange,
                icon: Icon(Icons.person),
                label: "我的"
              ),
            ],
          ),
        );
      }
    }
    

    这里BottomNavigationBar必须要设置items,items里面是多个BottomNavigationBarItem,BottomNavigationBarItem可以设置图标和标题同时也可以设置背景颜色,这里需要注意的是BottomNavigationBar的currentIndex是当前选中的Tab的索引,因此必须要设置才能看到点击后的切换效果,另外BottomNavigationBar的type属性是设置选择的效果,就如同开头展示的那两种效果,其中BottomNavigationBarType.fixed是普通的效果,BottomNavigationBarType.shifting是比较花哨的效果,设置了花哨的效果必须要给BottomNavigationBarItem设置背景颜色才能看到效果,为了方便查看,下面以表格的形式展示出重要的属性:
    BottomNavigationBar

    属性 说明
    items 底部导航栏的显示项(BottomNavigationBarItem)
    onTap 选择TAB时的回调
    currentIndex 当前的索引
    type 选择TAB时的效果(普通:BottomNavigationBarType.fixed,花哨:BottomNavigationBarType.shifting)
    fixedColor 底部导航栏type为fixed时导航栏的颜色,如果为空的话默认使用ThemeData.primaryColor

    BottomNavigationBarItem

    属性 说明
    icon 要显示的图标控件(Icon)
    label 显示的标题
    backgroundColor BottomNavigationBarType为shifting时的背景颜色

    案例源码

    https://gitee.com/itfitness/bottom-navigation-bar-demo

    相关文章

      网友评论

        本文标题:Flutter底部导航

        本文链接:https://www.haomeiwen.com/subject/hwhhtrtx.html