Flutter 自定義 TabBar
TabBar常用於放在AppBar中,以標籤頁的形式展示同一個頁面不同內容的主題標籤。
常見的屬性如下:
1. tabs 標籤組。值的型別為Widget列表;
2. controller 標籤控制器。值的型別為TabController;
3. isScrollable 標籤組是否可以滾動。值的型別為bool;
4. indicatorColor 指示器的顏色。值的型別為Colors;
5. indicatorWeight 指示器權重,即顯示高度。值的型別為double;
6. indicatorPadding 指示器的內邊距。值的型別為EdgeInsets;
7. indicator 指標器裝飾。值的型別為Decoration;
8. indicatorSize 指示器的大小。值的型別為TabBarIndicatorSize,常用的值為TabBarIndicatorSize.label;
9. labelColor 標籤的顏色。值的型別為Colors;
10. labelStyle 標籤的樣式。值的型別為TextStyle;
11. labelPadding 標籤的內邊距。值的型別為EdgeInsets;
12. unselectedLabelColor 選中標籤的顏色。值的型別為Colors;
13. unselectedLabelStyle 選中標籤的樣式。值的型別為TextStyle;
1. 實現一個普通的Tab選項卡
程式碼示例:
import 'package:flutter/material.dart';
class HomePage extends StatelessWidget {
const HomePage({Key key}) : super(key: key);
@override
Widget build(BuildContext context) {
// 新增頂部導航條
return DefaultTabController(
// 切換的數量
length:2,
child: Scaffold(
appBar: AppBar(
// App標題
title:Text('Flutter App'),
// 無論什麼平臺,標題都居中
centerTitle: true,
// 背景顏色
backgroundColor: Colors.red,
// 標籤欄
bottom: TabBar(
// 指示器的大小
indicatorSize: TabBarIndicatorSize.label,
// 標籤
tabs: <Widget>[
Tab(text:"熱門"),
Tab(text:"推薦")
],
),
),
// 標籤頁所對應的頁面
body:TabBarView(
children: <Widget>[
ListView(
children:<Widget>[
Center(child:ListTile(
title:Text("熱門內容")
))
]
),
ListView(
children:<Widget>[
ListTile(
title:Text("推薦內容")
)
]
)
],
)
)
);
}
}
效果圖如下:
2. 實現常見App的選項卡效果
程式碼如下:
// lib/pages/tabs/Gategory.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 DefaultTabController(
// 標籤數量
length: 9,
child:Scaffold(
appBar: AppBar(
title:Row(
children: <Widget>[
// 彈性容器佈局
Expanded(
child:TabBar(
// 多個標籤時滾動載入
isScrollable:true,
// 標籤指示器的顏色
indicatorColor: Colors.red,
// 標籤的顏色
labelColor: Colors.black,
// 未選中標籤的顏色
unselectedLabelColor: Colors.white,
// 指示器的大小
indicatorSize: TabBarIndicatorSize.label,
// 指示器的權重,即線條高度
indicatorWeight: 4.0,
tabs: <Widget>[
Tab(text:"熱銷"),
Tab(text:"推薦"),
Tab(text:"搞笑"),
Tab(text:"妙招"),
Tab(text:"關注"),
Tab(text:"時尚"),
Tab(text:"女性"),
Tab(text:"服裝"),
Tab(text:"男性"),
],
)
)
],
)
),
// 標籤頁所對應的頁面
body:TabBarView(
children: <Widget>[
ListView(
children:<Widget>[
ListTile(
title:Text("熱銷內容")
)
]
),
ListView(
children:<Widget>[
ListTile(
title:Text("推薦內容")
)
]
),
ListView(
children:<Widget>[
ListTile(
title:Text("搞笑內容")
)
]
),
ListView(
children:<Widget>[
ListTile(
title:Text("妙招內容")
)
]
),
ListView(
children:<Widget>[
ListTile(
title:Text("關注內容")
)
]
),
ListView(
children:<Widget>[
ListTile(
title:Text("時尚內容")
)
]
),
ListView(
children:<Widget>[
ListTile(
title:Text("女性內容")
)
]
),
ListView(
children:<Widget>[
ListTile(
title:Text("服裝內容")
)
]
),
ListView(
children:<Widget>[
ListTile(
title:Text("男性內容")
)
]
),
],
)
)
);
}
}
效果圖如下:
3. 自定義帶控制器Tab選項卡
程式碼如下:
// lib/pages/tabs/Setting.dart
import "package:flutter/material.dart";
// 設定頁面
class SettingPage extends StatefulWidget {
SettingPage({Key key}) : super(key: key);
_SettingPageState createState() => _SettingPageState();
}
// 混入 SingleTickerProviderStateMixin 這個類
class _SettingPageState extends State<SettingPage> with SingleTickerProviderStateMixin {
// 標籤控制器
TabController _tabController;
@override
// 初始化載入-生命週期函式
void initState() {
super.initState();
// 定義控制器
_tabController = new TabController(
vsync: this,
length: 2,
);
// 新增監聽事件
_tabController.addListener((){
print(_tabController.index);
});
}
// 關閉銷燬-生命週期函式
@override
void dispose() {
super.dispose();
// 殺死控制器
_tabController.dispose();
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('設定頁面'),
bottom: TabBar(
// 加上控制器
controller: this._tabController,
tabs: <Widget>[
Tab(text:'熱門'),
Tab(text:'推薦'),
],
),
),
body: TabBarView(
// 加上控制器
controller: this._tabController,
children: <Widget>[
Center(child:Text('熱門頁面')),
Center(child:Text('推薦頁面')),
],
),
);
}
}
效果圖如下:
上面這個自定義的Tab選項卡看起來很簡單,但是由於加入了控制器,在實際專案中可以運用控制器實現一些複雜的頁面互動。
相關文章
- 自定義 tabBartabBar
- iOS自定義tabBariOStabBar
- 微信小程式自定義tabBar微信小程式tabBar
- 微信小程式 自定義tabbar微信小程式tabBar
- 自定義react-navigation的TabBarReactNavigationtabBar
- iOS OC-自定義TabBar TabBarViewControlleriOStabBarViewController
- 自定義TabBar動畫效果 - 頁面轉場(Swift)tabBar動畫Swift
- 微信小程式實用小元件:自定義tabbar微信小程式元件tabBar
- 微信小程式底部實現自定義動態Tabbar微信小程式tabBar
- Flutter 自定義繪製 ViewFlutterView
- flutter:教你自定義DialogFlutter
- vue 自定義元件tabbarVue元件tabBar
- flutter系列之:在flutter中自定義themesFlutter
- Flutter自定義View(二)—— MultiChildRenderObejctWidgetFlutterView
- Flutter自定義CupertinoPageRoute進入動畫Flutter動畫
- Flutter Widget自定義總結Flutter
- Flutter 之 自定義控制元件Flutter控制元件
- Flutter自定義佈局-CustomMultiChildLayoutFlutter
- Flutter自定義Banner的實現Flutter
- Flutter自定義View的實現FlutterView
- uni-app中自定義動態底部tabbar(附示例原始碼)APPtabBar原始碼
- 【Flutter實戰】自定義滾動條Flutter
- Flutter 建立自定義路由過渡動畫Flutter路由動畫
- Flutter自定義字型你想知道的!Flutter自定義字型
- Flutter 自定義縮放控制元件Flutter控制元件
- 使用 Flutter 自定義一個 ProgressBar - IntervalProgressBarFlutter
- Flutter動畫之自定義動畫元件-FlutterLayoutFlutter動畫元件
- 在Flutter中使用自定義IconFlutter
- Flutter自定義繪製Widget初探Flutter
- Flutter實現自定義篩選框Flutter
- 教你自定義Flutter錯誤頁面Flutter
- flutter - 自定義 Drawer 元件(不依賴 Scaffold)Flutter元件
- Flutter 仿掘金之動態TabbarFluttertabBar
- Flutter使用TabBar問題小結FluttertabBar
- Flutter深入淺出元件篇---TabBarFlutter元件tabBar
- 小技巧:Flutter如何引用自定義圖示Flutter
- Flutter自定義Widget和使用方法Flutter
- Flutter日曆,可以自定義風格UIFlutterUI