当前位置:   article > 正文

Flutter 底部导航栏(Tab 页)的快速实现_flutter tab

flutter tab

Flutter 底部导航栏(Tab 页)的快速实现


我们知道 Scaffold 实现了基本的 Material 布局。只要是在 Material 中定义了的单个界面显示的布局控件元素,都可以使用 Scaffold 来绘制。

如果我们想实现底部 Tab 页切换的效果,应该如何做呢?

bottomNavigationBar

Scaffold 的 bottomNavigationBar 属性是一个 BottomNavigationBar 类型的对象。BottomNavigationBar 是底部导航条,可以帮助我们实现底部 Tab 切换。

它通常和 BottomNavigationBarItem 配合使用

属性

我们来看 BottomNavigationBar 的常见的属性:

属性类型说明
itemsList底部导航条按钮集合
iconSizedoubleBottomNavigationBarItem icon的大小
currentIndexint当前显示项的下标
onTapValueChanged < int >点击导航栏子项时的回调
fixedColorColor底部导航栏 type 为 fixed 时导航栏的颜色,如果为空的话默认使用 ThemeData.primaryColor
typeBottomNavigationBarType底部导航栏的类型,有 fixed 和s hifting 两种类型,显示效果不一样

我们再来看一下 BottomNavigationBarItem。

BottomNavigationBarItem

底部导航栏要显示的 Item,由图标和标题组成。

构造方法:

  const BottomNavigationBarItem({
    @required this.icon,
    this.title,
    Widget activeIcon,
    this.backgroundColor,
  }) : activeIcon = activeIcon ?? icon,
       assert(icon != null);
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
属性
属性类型说明
iconWidget要显示的图标控件,一般都是 Iocn
titleWidget要显示的标题控件,一般都是 Text
activeIconWidget选中时要显示的 icon,一般都是 Icon
backgroundColorColorBottomNavigationBarType 为 shifting 时的背景颜色

底部导航栏的实现

1. 首先,定义 tab 页面

示例:

  List<Widget> _pageList = [
    NowPage(),
    PlansPage(),
    IdeasPage(),
  ];
  • 1
  • 2
  • 3
  • 4
  • 5
2. 定义底部导航按钮

示例:

  List<BottomNavigationBarItem> _barItem = [
    BottomNavigationBarItem(icon: Icon(Icons.home), title: Text('首页')),
    BottomNavigationBarItem(icon: Icon(Icons.list), title: Text('任务')),
    BottomNavigationBarItem(icon: Icon(Icons.access_time), title: Text('计划')),
  ];
  • 1
  • 2
  • 3
  • 4
  • 5
3. 定义当前展示的 tab 页面索引

示例:

  int _currentIndex = 0;
  • 1
4. 关联所有元素,并实现 tab 页效果

示例:

class MainPage extends StatefulWidget{
  MainPage({Key key, this.title}) : super(key: key);

  final String title;

  @override
  _MainPage createState() => _MainPage();
}

class _MainPage extends State<MainPage> {
  int _currentIndex = 0;
  List<Widget> _pageList = [
    NowPage(),
    PlansPage(),
    IdeasPage(),
  ];
  List<BottomNavigationBarItem> _barItem = [
    BottomNavigationBarItem(icon: Icon(Icons.home), title: Text('首页')),
    BottomNavigationBarItem(icon: Icon(Icons.list), title: Text('任务')),
    BottomNavigationBarItem(icon: Icon(Icons.access_time), title: Text('计划')),
  ];
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text(widget.title),
        actions: [
          new IconButton(
            icon: new Icon(Icons.add, color: Colors.white,),
            onPressed: null,
          )],
      ),
      body: this._pageList[this._currentIndex],
      bottomNavigationBar: BottomNavigationBar(
        onTap: (int index) {
          setState(() {
            this._currentIndex = index;
          });
        },
        currentIndex: this._currentIndex,
        items: _barItem,
        iconSize: 25,
        fixedColor: Colors.green,
        selectedFontSize: 16,
        unselectedFontSize: 12,
        type: BottomNavigationBarType.fixed,

      ),
    );
  }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51

注意,这里页面时需要变换的,所以首页要继承自 StatefulWidget 类。


**PS:更多精彩内容,请查看 --> 《Flutter 开发》
**PS:更多精彩内容,请查看 --> 《Flutter 开发》
**PS:更多精彩内容,请查看 --> 《Flutter 开发》

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小丑西瓜9/article/detail/431923
推荐阅读
相关标签
  

闽ICP备14008679号