TabBar
、TabBarView
與 DefaultTabController
可實現 Tab 介面。
Version
Flutter 3.24
Flutter
- Android 與 iOS 都成功實現 TabBar
TabBar
import 'package:flutter/material.dart';
class Home extends StatelessWidget {
const Home({super.key});
Widget build(BuildContext context) {
var appBar = AppBar(
title: const Text('TabBar with DefaultTabController'),
);
var tabBar = const TabBar(
tabs: [
Tab(text: 'Car'),
Tab(text: 'Train'),
Tab(text: 'Bike'),
],
);
var tabBarView = const Expanded(
child: TabBarView(children: [
Center(child: Text('Car Tab')),
Center(child: Text('Train Tab')),
Center(child: Text('Bike Tab')),
]),
);
var body = DefaultTabController(
length: 3,
child: Column(children: [
tabBar,
tabBarView,
]),
);
return Scaffold(
appBar: appBar,
body: body,
);
}
}
Line 28
var body = DefaultTabController(
length: 3,
child: Column(children: [
tabBar,
tabBarView,
]),
);
DefaultTabController
:對於簡易的TabBar
,使用DefaultTabController
即可,且TabBar
與TabBarView
必須在DefaultTabController
底下length
:設定 Tab 數量
Line 12
var tabBar = const TabBar(
tabs: [
Tab(text: 'Car'),
Tab(text: 'Train'),
Tab(text: 'Bike'),
],
);
TabBar
:建立 TabBar 顯示 Tab buttontabs
:放置多個 Tab,個數
必須與DefaultTabController
的length
相同
Line 20
var tabBarView = const Expanded(
child: TabBarView(children: [
Center(child: Text('Car Tab')),
Center(child: Text('Train Tab')),
Center(child: Text('Bike Tab')),
]),
);
TabBarView
:建立TabBarView
顯示可切換的 viewTabBarView
放置在Column
內時,必須包在Expanded
內,否則會 render 失敗
Conclusion
- 大多範例會將 TabBar 放在
appBar
下,事實上也可以放在body
下 TabBarView
不會自動在Column
內延展,必須包在Expanded
內DefaultTabControll
不必
直接放在最上層
,亦可放在Scaffold
的body
之下