按下按钮更改 BottomNavigationBar 索引

Change BottomNavigationBar index with button press

我有一个像这样的底部导航栏:

Scaffold navBarPages() {
    return Scaffold(
      key: _scaffoldKey,
      body: PageView(
        children: <Widget>[
          //Sends current user to pages.
          PageOne(),
          PageTwo(),
          PageThree(),
          PageFour(),
          PageFive(),
        ],
        controller: pageController,
        onPageChanged: onPageChanged,
        physics: NeverScrollableScrollPhysics(),
      ),
      bottomNavigationBar: CupertinoTabBar(
        currentIndex: pageIndex,
        onTap: onTap,
        activeColor: Theme.of(context).primaryColor,
        items: [
          BottomNavigationBarItem()
          ...
        ],
      ),
    );
  }

在 PageFive() 上,我正在执行一个按下按钮的操作,我想将屏幕弹出到 PageOne()。 Navigator.pop(context) returns 到 PageFive(),关闭有按钮的屏幕。

我尝试在我的 main 上使用路由,然后推送到“/pageOne”namedRoute。但是随后 pageOne 没有与 BottomNavBar 一起出现,我想关闭的屏幕仍在小部件树下。我想完全弹出它,将用户重定向到第一页。

更新: 将 pushAndRemove 与路由一起使用:

Navigator.of(context).pushNamedAndRemoveUntil(
'/pageOne', (Route<dynamic> route) => false);

我在路由方面遇到的问题是 BottomNavBar 在推送后不会显示。但为了修复它,我改变了 routes: {'/pageOne': (context) => PageOne()}routes: {'/home': (context) => Home()}

Home 包含 BottomNavBar class,因此它适用于 'reload' 应用程序,将用户重定向到第一页。

如果你只是想导航到“/pageOne”并删除所有以前的路线,而不是Navigator.pop(context),你可以做类似

的事情
  Navigator.of(context).pushNamedAndRemoveUntil(
      '/pageOne', (Route<dynamic> route) => false);