it营大地专栏

Flutter教程_Flutter实现底部tab切换_ Flutter BottomNavigationBar 自定义底部导航条实现底部页面tab切换

发布于 8 个月前 作者 phonegap100 498 次浏览 最后一次编辑是 8 个月前 来自 分享

BottomNavigationBar 是底部导航条,可以让我们定义底部Tab切换,bottomNavigationBar是Scaffold组件的参数。

这是Flutter BottomNavigationBar 自定义底部导航条实现底部页面tab切换的效果 a.png

BottomNavigationBar 常见的属性

items List<BottomNavigationBarItem> 底部导航条按钮集合 iconSize icon currentIndex 默认选中第几个 onTap 选中变化回调函数 fixedColor 选中的颜色
type

BottomNavigationBarType.fixed BottomNavigationBarType.shifting

Scaffold(
        appBar: AppBar(
          title: Text('Flutter Demo')
        ),
        body: this._pagesList[this._curentIndex],
        bottomNavigationBar: BottomNavigationBar(
          currentIndex: _curentIndex,
          onTap: _changePage,
          fixedColor: Colors.black,
          type: BottomNavigationBarType.fixed,
          items: [
            BottomNavigationBarItem(
              title:Text("首页"),
              icon:Icon(Icons.home)
            ),
            BottomNavigationBarItem(
              title:Text("分类"),
              icon:Icon(Icons.category)
            ),
            BottomNavigationBarItem(
              title:Text("设置"),
              icon:Icon(Icons.settings)
            ),
            
          ],
        ),
)

Flutter BottomNavigationBar 自定义底部导航条实现底部页面tab切换完整代码

main.dart

import 'package:flutter/material.dart';

import 'pages/Tabs.dart';

void main() => runApp(MyApp());
class MyApp extends StatelessWidget {  
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home:Tabs()
    );
  }
}

tabs.dart


import 'package:flutter/material.dart';
import 'tabs/Home.dart';
import 'tabs/Category.dart';
import 'tabs/Setting.dart';

class Tabs extends StatefulWidget {
  Tabs({Key key}) : super(key: key);

  _TabsState createState() => _TabsState();
}

class _TabsState extends State<Tabs> {

  int _currentIndex=0;
  List _pageList=[
    HomePage(),
    CategoryPage(),
    SettingPage(),
  ];
  @override
  Widget build(BuildContext context) {
    return Scaffold(
        appBar: AppBar(
          title: Text("Flutter Demo"),
        ),
        body: this._pageList[this._currentIndex],
        bottomNavigationBar: BottomNavigationBar(
          currentIndex: this._currentIndex,   //配置对应的索引值选中
          onTap: (int index){
              setState(() {  //改变状态
                  this._currentIndex=index;
              });
          },
          iconSize:36.0,      //icon的大小
          fixedColor:Colors.red,  //选中的颜色  
          type:BottomNavigationBarType.fixed,   //配置底部tabs可以有多个按钮
          items: [
            BottomNavigationBarItem(
              icon: Icon(Icons.home),
              title: Text("首页")
            ),
             BottomNavigationBarItem(
              icon: Icon(Icons.category),
              title: Text("分类")
            ),
            
             BottomNavigationBarItem(
              icon: Icon(Icons.settings),
              title: Text("设置")
            )
          ],
        ),
      );
  }
}

Home.dart

import 'package:flutter/material.dart';

class HomePage extends StatefulWidget {
  HomePage({Key key}) : super(key: key);

  _HomePageState createState() => _HomePageState();
}

class _HomePageState extends State<HomePage> {
  @override
  Widget build(BuildContext context) {
    return Text("我是首页组件");
  }
}

Category.dart

import 'package:flutter/material.dart';

class CategoryPage extends StatefulWidget {
  CategoryPage({Key key}) : super(key: key);

  _CategoryPageState createState() => _CategoryPageState();
}

class _CategoryPageState extends State<CategoryPage> {
  @override
  Widget build(BuildContext context) {
    return Text("分类");
  }
}

Setting.dart

import 'package:flutter/material.dart';

class SettingPage extends StatefulWidget {
  SettingPage({Key key}) : super(key: key);

  _SettingPageState createState() => _SettingPageState();
}

class _SettingPageState extends State<SettingPage> {
  @override
  Widget build(BuildContext context) {
    return ListView(
      children: <Widget>[
        ListTile(
          title: Text("我是一个文本"),
        ),
         ListTile(
          title: Text("我是一个文本"),
        ),
         ListTile(
          title: Text("我是一个文本"),
        ),
         ListTile(
          title: Text("我是一个文本"),
        )
      ],
    );
  }
}
回到顶部