0

我在网上看了,但有各种案例我尝试过但都失败了,看起来很容易,但有些案例却很难。我有一个 BottomNavBar,我在其中列出了我要渲染的小部件,它工作正常(但不确定它是否是正确的方法)。我有一个Drawer,当我按下其中一个菜单项时,我想渲染那个小部件,但 BottomNavBar 是持久的。换句话说,几乎所有的屏幕都应该使用持久的 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 内的索引,但失败了。对于我遇到的这类问题,有更好的解决方案吗?在此先感谢您的帮助!

4

0 回答 0