Flutter 中 BottomNavigationBar 定義底部導航條
BottomNavigationBar 是底部導航條,可以讓我們定義底部 Tab 切換,在Scaffold 元件中通過配置bottomNavigationBar來實現該功能。
常見的屬性:
1. items 底部導航條按鈕集合。值的型別為List;
2. iconSize 圖示大小。值的型別為double;
3. currentIndex 預設選中Tab的下標。值的型別為int;
4. fixedColor 選中Tab的顏色。值的型別為Colors;
5. type 按鈕的顯示型別。常用以下兩種值:
(1). BottomNavigationBarType.fixed 固定效果;
(2). BottomNavigationBarType.shifting 動畫效果;
6. onTap 點選Tab時的回撥函式。
利用BottomNavigationBar實現一個App的分頁切換。
首先是入口檔案 main.dart。
import 'package:flutter/material.dart';
// 引入拆分的Tabs元件
import 'pages/Tabs.dart';
void main(){
runApp(MyApp());
}
// 抽離成一個單獨的元件
class MyApp extends StatelessWidget{
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Tabs(),
// 主題
theme: ThemeData(primarySwatch:Colors.yellow),
);
}
}
以下是入口檔案main.dart中引入的Tabs.dart。
// lib/pages/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 Container(
child: Scaffold(
// 導航條
appBar:AppBar(title:Text('Flutter App')),
// 主體
body:this._pageList[this._currentIndex],
// 底部導航條
bottomNavigationBar: BottomNavigationBar(
// 當前選單下標
currentIndex: this._currentIndex,
// 點選事件,獲取當前點選的標籤下標
onTap: (int index){
setState(() {
this._currentIndex=index;
});
},
// 圖示大小
iconSize: 30.0,
// 選中圖示的顏色
fixedColor: Colors.red,
// 配置底部可以有多個Tab標籤頁(5個時就需要)
type: BottomNavigationBarType.fixed,
items: [
// 只能是BottomNavigationBarItem的型別
BottomNavigationBarItem(
icon:Icon(Icons.home),
label:"首頁"
),
BottomNavigationBarItem(
icon:Icon(Icons.category),
label:"分類"
),
BottomNavigationBarItem(
icon:Icon(Icons.settings),
label:"設定"
)
]
),
));
}
}
Tabs.dart中引入的Home.dart。
// lib/pages/tabs/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 Container(
child:Text("我是首頁")
);
}
}
Tabs.dart中引入的Gategory.dart。
// lib/pages/tabs/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 Container(
child:Text("我是分類頁面")
);
}
}
Tabs.dart中引入的Setting.dart。
// lib/pages/tabs/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 Container(
child: Text("我是設定頁面")
);
}
以下是效果圖:
「其他文章」
- Android——一個簡單的銀行系統
- 可以讓你寫到簡歷上的“網約車”專案,太讚了!!!
- git clone early EOF解決方法
- ES6(三) Promise 的基本使用方式
- Linux的哲學思想
- 為什麼阿里巴巴不建議 boolean 型別變數用 isXXX?
- 微信之夜,張小龍說視訊化表達將會成為下一個十年內容領域的主題
- WEB入門.九 導航選單
- 探索 .Net Core 的 SourceLink
- EdgeBERT:極限壓縮,比ALBERT再輕13倍!樹莓派上跑BERT的日子要來了? - 知乎
- shell 中if [ -e/d/f ..... ] 詳解
- 寫“好”程式碼的十九條準則
- 自學第三十五天
- 謝煙客---------二進位制安裝MariaDB,管理關係型資料庫的基本元件
- Egret之Sound壓縮方案
- Android studio 解決編譯速度慢 Download maven-metadata.xml速度很慢
- Flutter 中 BottomNavigationBar 定義底部導航條
- 肖四背背背
- nginx配置檔案
- yanghui三角形