預設 TabBar
並沒有 Icon,可在 Tab
內使用 Row
組合 Icon
與 Text
實現。
Version
Flutter 3.24
Flutter
- Android 與 iOS 都成功實現 TabBar 有 icon
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 Icon'),
);
var tabBar = const TabBar(
tabs: [
Tab(
child: Row(
mainAxisSize: MainAxisSize.min,
children: [
Icon(Icons.home),
SizedBox(width: 8),
Text('Home'),
],
),
),
Tab(
child: Row(
mainAxisSize: MainAxisSize.min,
children: [
Icon(Icons.search),
SizedBox(width: 8),
Text('Search'),
],
),
),
Tab(
child: Row(
mainAxisSize: MainAxisSize.min,
children: [
Icon(Icons.person),
SizedBox(width: 8),
Text('Profile'),
],
),
),
],
);
var tabBarView = const Expanded(
child: TabBarView(
children: [
Center(
child: Text('Home Tab'),
),
Center(
child: Text('Search Tab'),
),
Center(
child: Text('Profile Tab'),
),
],
),
);
return Scaffold(
appBar: appBar,
body: DefaultTabController(
length: 3,
child: Column(
children: [
tabBar,
tabBarView,
],
),
),
);
}
}
Line 12
Tab(
child: Row(
mainAxisSize: MainAxisSize.min,
children: [
Icon(Icons.home),
SizedBox(width: 8),
Text('Home'),
],
),
),
Tab
:建立TabBar
的 TabRow
:使用Row
並列 Icon 與 TextminAxisSize
:使用最小寬度並列 Icon 與 TextIcon
:建立Icon
SizeBox
:設定 Icon 與 Text 的間距Text
:建立Text
Conclusion
- 若
Row
不使用minAxisSize
,則Row
會占滿整個Tab
,視覺上 Icon 與 Text 會靠左對齊
- 若
Row
使用minAxisSize
,因為使用最小寬度
,時覺上 Icon 與 Text 會水平置中