gpt4 book ai didi

flutter - 我们如何使用Flutter中的底部导航栏触发有状态的小部件来进行导航自身的重建?

转载 作者:行者123 更新时间:2023-12-03 03:39:49 28 4
gpt4 key购买 nike

当我们使用BottomNavigationBar导航到Flutter中的不同页面时,有状态页面似乎无法重建自身。

这意味着我们不能像抽屉那样使用BottomNavigationBar触发重建有状态的小部件。状态保持不变,BottomNavigationBar在页面上滑动,并且无助于重新构建整个页面。

int _selectedIndex = 0;
static const TextStyle optionStyle = TextStyle(fontSize: 30, fontWeight: FontWeight.bold);
static const List<Widget> _widgetOptions = <Widget>[
Page1(),
Page2(),
Page3(),
];

void _onItemTapped(int index) {
setState(() {
_selectedIndex = index;
});
}

@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: const Text('BottomNavigationBar Sample'),
),
body: _widgetOptions.elementAt(_selectedIndex),
),
bottomNavigationBar: BottomNavigationBar(
items: const <BottomNavigationBarItem>[
BottomNavigationBarItem(
icon: Icon(Icons.home),
title: Text('Home'),
),
BottomNavigationBarItem(
icon: Icon(Icons.business),
title: Text('Business'),
),
BottomNavigationBarItem(
icon: Icon(Icons.school),
title: Text('School'),
),
],
currentIndex: _selectedIndex,
selectedItemColor: Colors.amber[800],
onTap: _onItemTapped,
),
);
}

这里的小部件 Page1()Page2()Page3()是有状态的小部件,当通过底部导航栏进行导航时,它们似乎并没有重建自身。有什么办法可以做到吗?

最佳答案

代替

static const List<Widget> _widgetOptions = <Widget>[
Page1(),
Page2(),
Page3(),
];

使用
Widget _widgetOptions(int index) {
switch (index) {
case 0:
return Page1();
break;
case 1:
return Page2();
break;
case 2:
return Page3();
break;
}
return Page1();
}

并替换
body: _widgetOptions.elementAt(_selectedIndex),


body: _widgetOptions(_selectedIndex),

关于flutter - 我们如何使用Flutter中的底部导航栏触发有状态的小部件来进行导航自身的重建?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57864623/

28 4 0