我在网上查了一下,但有很多案例我尝试过但都失败了,有些案例看起来很容易但又很困难。我有一个BottomNavBar,我在其中列出了要渲染的小部件列表,并且可以正常工作(但不确定它是否是正确的方法)。我有一个 Drawer
,当我按下其中一个菜单项时,我想呈现该小部件,但底部导航栏是持久的。换句话说,几乎所有的屏幕都应该使用持久的 BottomNavBar 进行渲染。代码如下:
底部导航栏:
class BottomNavBar extends StatefulWidget {
static const String id = 'bottom_navbar_screen';
@override
_BottomNavBarState createState() => _BottomNavBarState();
}
class _BottomNavBarState extends State<BottomNavBar> {
int _selectedIndex = 0; // the starting screen (can be any of them by changing the starting index)
static List<Widget> _widgetOptions = <Widget>[
Screen1(),
Screen2(),
Screen3(),
Screen4(),
Screen5(),
];
void _onItemTapped(int index) {
setState(() {
_selectedIndex = index;
});
}
@override
Widget build(BuildContext context) {
return Scaffold(
body: Center(
child: _widgetOptions.elementAt(_selectedIndex),
),
bottomNavigationBar: BottomNavigationBar(
items: <BottomNavigationBarItem>[
BottomNavigationBarItem(
label: Tab1,
),
BottomNavigationBarItem(
label: Tab2,
),
BottomNavigationBarItem(
label:Tab3,
),
BottomNavigationBarItem(
label: Tab4,
),
BottomNavigationBarItem(
label: Tab5,
),
],
currentIndex: _selectedIndex,
onTap: _onItemTapped,
),
);
}
}
现在在应用程序的某个时刻,我有一个 Drawer
,当我按下抽屉内的一个菜单项时,它会发送我到 Screen2,我只是被发送到 Screen2,但没有 BottomNavBar显示(这是合乎逻辑的,但我想显示它,因此我遇到了问题)。我尝试使用 Navigator.push(context, MaterialPageRoute(builder: (context) => Screen2(index: 1),),);
并初始化 BottomNavBar 内的索引但失败了。对于我遇到的此类问题,是否有更好的解决方案?
在此先感谢您的帮助!