flutter中BottomNavigationBar保持数据状态的方法 直接在Scaffold body中去添加一个IndexedStack来接受当前页面index:id,在children中去赋值它的页面组件即可。
class BottomNavgetionWiget extends StatefulWidget {
@override
_BottomNavgetionWigetState createState() => _BottomNavgetionWigetState();
}
class _BottomNavgetionWigetState extends State<BottomNavgetionWiget> {
int _index = 0;
List<Widget> _fragmen_list = List();
@override
Widget build(BuildContext context) {
return Scaffold(
body: IndexedStack(
index: _index,
children: _fragmen_list,
),
bottomNavigationBar: BottomNavigationBar(
unselectedItemColor: Colors.deepOrange,
selectedItemColor: Colors.green,
showSelectedLabels: true,
showUnselectedLabels: true,
currentIndex: _index,
items: [
BottomNavigationBarItem(
icon: Icon(
Icons.home,
),
title: buildText("Home")),
BottomNavigationBarItem(
icon: Icon(
Icons.eco,
),
title: buildText("Eco")),
BottomNavigationBarItem(
icon: Icon(
Icons.add_alarm_sharp,
),
title: buildText("Sharp")),
BottomNavigationBarItem(
icon: Icon(
Icons.mark_email_unread,
),
title: buildText("Unread")),
],
onTap: (value) {
setState(() {
_index = value;
});
},
),
);
}
Text buildText(String name) {
return Text(name, style: TextStyle(fontSize: 16));
}
@override
void initState() {
super.initState();
_fragmen_list
..add(Home_page())
..add(Eco_page())
..add(Sharp_page())
..add(Unread_page());
}
}