📅  最后修改于: 2023-12-03 15:22:04.731000             🧑  作者: Mango
底部导航栏是现代移动应用程序中的重要组成部分,它使得跳转到不同页面变得更加方便。在Dart中,通过编程的方式颤动底部导航栏更改页面非常容易。
首先,我们需要创建一个底部导航栏。这可以通过使用Flutter提供的BottomNavigationBar组件轻松完成。下面是一个基本的示例:
import 'package:flutter/material.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
final List<Widget> _pages = [
HomePage(),
SearchPage(),
ProfilePage(),
];
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Flutter Demo',
home: Scaffold(
body: _pages[0],
bottomNavigationBar: BottomNavigationBar(
backgroundColor: Colors.white,
selectedItemColor: Colors.blue,
unselectedItemColor: Colors.grey,
onTap: (index) {
// TODO: Change page
},
items: [
BottomNavigationBarItem(
icon: Icon(Icons.home),
label: 'Home',
),
BottomNavigationBarItem(
icon: Icon(Icons.search),
label: 'Search',
),
BottomNavigationBarItem(
icon: Icon(Icons.person),
label: 'Profile',
),
],
),
),
);
}
}
class HomePage extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Center(
child: Text('Home Page'),
);
}
}
class SearchPage extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Center(
child: Text('Search Page'),
);
}
}
class ProfilePage extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Center(
child: Text('Profile Page'),
);
}
}
在这个示例中,我们创建了一个包含三个页面的底部导航栏,即主页(HomePage)、搜索页(SearchPage)和个人资料页(ProfilePage)。每个页面都是一个简单的Center小部件,用于显示相应页面的标题。
现在,我们需要编写代码来在点击底部导航栏时更改当前页面。我们可以使用setState更改当前页面,以便Flutter可以重新构建底部导航栏并切换当前页面。
class MyApp extends StatefulWidget {
@override
_MyAppState createState() => _MyAppState();
}
class _MyAppState extends State<MyApp> {
int _currentPageIndex = 0;
final List<Widget> _pages = [
HomePage(),
SearchPage(),
ProfilePage(),
];
void _onTapBottomNavigation(int index) {
setState(() {
_currentPageIndex = index;
});
}
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Flutter Demo',
home: Scaffold(
body: _pages[_currentPageIndex],
bottomNavigationBar: BottomNavigationBar(
backgroundColor: Colors.white,
selectedItemColor: Colors.blue,
unselectedItemColor: Colors.grey,
currentIndex: _currentPageIndex,
onTap: _onTapBottomNavigation,
items: [
BottomNavigationBarItem(
icon: Icon(Icons.home),
label: 'Home',
),
BottomNavigationBarItem(
icon: Icon(Icons.search),
label: 'Search',
),
BottomNavigationBarItem(
icon: Icon(Icons.person),
label: 'Profile',
),
],
),
),
);
}
}
在这个示例中,我们将MyApp小部件从无状态小部件(StatelessWidget)更改为有状态小部件(StatefulWidget),以便我们可以使用setState方法更改当前页面。
我们添加了一个变量_currentPageIndex来跟踪当前页面的索引。当用户点击底部导航栏时,我们调用_onTapBottomNavigation函数,并传入被点击标签的索引。在_onTapBottomNavigation函数中,我们使用setState方法来更改当前页面。最后,我们在BottomNavigationBar小部件中使用currentIndex属性来指定当前页面的索引,以使框架能够正确高亮选定的标签。
现在,我们已经知道了如何使用Dart和Flutter通过编程方式颤动底部导航栏更改页面。我们创建了一个包含三个页面的底部导航栏,并使用setState方法实现了页面更改。在实际开发中,底部导航栏通常会包含更多的标签和功能。因此,我们可以根据需要修改上述示例中的代码。