flutter:BottomNavigationBar和TabBar
BottomNavigationBar
和TabBar
都是在Flutter中常用的导航组件,但它们有一些重要的区别:
- 位置:
BottomNavigationBar
通常放在底部栏,用于切换顶部不同的页面视图,比如主页、通讯录等。而TabBar
则通常放在顶部或侧边,用于切换同一页面内的不同内容区域。 - 设计风格:
BottomNavigationBar
的设计风格通常遵循Material Design的底部导航指南。而TabBar
的风格则根据设计需求可以有不同的风格。 - 使用场景:
BottomNavigationBar
适合用于少量(通常不超过5个)顶级导航项。而TabBar
可以用于管理较多(通常超过5个)内容区域或者子页面。
以下是一个简单的例子,展示如何在Flutter中使用BottomNavigationBar
和TabBar
:
import 'package:flutter/material.dart';
void main() => runApp(MyApp());
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
home: HomePage(),
);
}
}
class HomePage extends StatefulWidget {
@override
_HomePageState createState() => _HomePageState();
}
class _HomePageState extends State<HomePage> {
int _selectedIndex = 0;
// 底部导航栏的切换回调
void _onItemTapped(int index) {
setState(() {
_selectedIndex = index;
});
}
@override
Widget build(BuildContext context) {
return Scaffold(
bottomNavigationBar: BottomNavigationBar(
currentIndex: _selectedIndex,
onTap: _onItemTapped,
items: [
BottomNavigationBarItem(icon: Icon(Icons.home), title: Text('Home')),
BottomNavigationBarItem(icon: Icon(Icons.mail), title: Text('Mail')),
],
),
body: IndexedStack(
index: _selectedIndex,
children: <Widget>[
Center(child: Text('Home Page')),
Center(child: Text('Mail Page')),
],
),
);
}
}
class TabBarPage extends StatefulWidget {
@override
_TabBarPageState createState() => _TabBarPageState();
}
class _TabBarPageState extends State<TabBarPage> with SingleTickerProviderStateMixin {
TabController _tabController;
@override
void initState() {
super.initState();
_tabController = TabController(length: 2, vsync: this);
}
@override
void dispose() {
_tabController.dispose();
super.dispose();
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar
评论已关闭