使用 tabs
在 Material Design 設計準則裡,tabs 是一種常用的佈局模型。 Flutter 自帶的 Material 函式庫 可以幫助開發者們非常便捷的建立 tab 佈局。
這份教程將幫助你建立一個 tabs 佈局範例,請參見如下步驟:
步驟
-
建立
TabController
-
建立 tabs
-
為每個 tab 建立內容
TabController
1. 建立 為了使所選的 tab 與它所對應的內容能夠同步變化,需要用 TabController
進行控制。
我們既可以手動建立一個 TabController
,也能夠直接使用
DefaultTabController
widget。
最簡單的選擇是使用 DefaultTabController
widget,因為它能夠建立出一個可供所有子 widgets 使用的 TabController
。
return MaterialApp(
home: DefaultTabController(
length: 3,
child: Scaffold(),
),
);
2. 建立 tabs
現在我們已經成功建立了 TabController
,接下來就可以用 TabBar
widget
來建立 tabs。下面這個範例建立了包含三組
Tab
widget 的 TabBar
(一個),並把它放置於 AppBar
widget 中。
return MaterialApp(
home: DefaultTabController(
length: 3,
child: Scaffold(
appBar: AppBar(
bottom: const TabBar(
tabs: [
Tab(icon: Icon(Icons.directions_car)),
Tab(icon: Icon(Icons.directions_transit)),
Tab(icon: Icon(Icons.directions_bike)),
],
),
),
),
),
);
TabBar
預設將會在 Widget 樹中向上尋找離它最近的一個
DefaultTabController
節點作為自己的 TabController
。如果你想手動建立 TabController
,那麼你必須將它作為引數傳給 TabBar
。
3. 為每個 tab 建立內容
現在我們已經成功建立了一些 tabs,接下來要實現的是 tab 被選中時顯示其對應的內容。為了實現這個效果,我們將使用
TabBarView
widget。
body: const TabBarView(
children: [
Icon(Icons.directions_car),
Icon(Icons.directions_transit),
Icon(Icons.directions_bike),
],
),
互動式範例
import 'package:flutter/material.dart';
void main() {
runApp(const TabBarDemo());
}
class TabBarDemo extends StatelessWidget {
const TabBarDemo({super.key});
@override
Widget build(BuildContext context) {
return MaterialApp(
home: DefaultTabController(
length: 3,
child: Scaffold(
appBar: AppBar(
bottom: const TabBar(
tabs: [
Tab(icon: Icon(Icons.directions_car)),
Tab(icon: Icon(Icons.directions_transit)),
Tab(icon: Icon(Icons.directions_bike)),
],
),
title: const Text('Tabs Demo'),
),
body: const TabBarView(
children: [
Icon(Icons.directions_car),
Icon(Icons.directions_transit),
Icon(Icons.directions_bike),
],
),
),
),
);
}
}