持续的底部导航栏在屏幕路由上颤动

时间:2021-07-14 10:43:34

标签: flutter mobile flutter-layout flutter-bottomnavigation

我在网上查了一下,但有很多案例我尝试过但都失败了,有些案例看起来很容易但又很困难。我有一个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 内的索引但失败了。对于我遇到的此类问题,是否有更好的解决方案? 在此先感谢您的帮助!

0 个答案:

没有答案