【问题标题】:Change BottomNavigationBar index with button press按下按钮更改 BottomNavigationBar 索引
【发布时间】:2019-10-29 22:43:17
【问题描述】:

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

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) 返回 PageFive(),关闭有按钮的屏幕。

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

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

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

我遇到的路线问题是,在推送后,BottomNavBar 不会显示。但为了解决它,我改变了 routes: {'/pageOne': (context) =&gt; PageOne()}routes: {'/home': (context) =&gt; Home()}

Home 包含 BottomNavBar 类,因此它可以“重新加载”应用程序,将用户重定向到第一页。

【问题讨论】:

  • 更常规的方法是在单击按钮后更改 pageIndex 变量。这不适合您吗?
  • 我必须使用回调从另一个类访问 pageIndex 对吗?这可能是一个问题,因为具有按钮的页面不是 BottomNavBar 的子页面。有没有办法改变它?
  • 我会采用的方法是通过状态管理方法,例如 ChangeNotifierProvider 或 ScopedModel。状态管理基本上就是您使用的,当您想在您的小部件中使用变量时,不需要将它传递到一些小部件层次结构中。你可以在这里flutter.dev/docs/development/data-and-backend/state-mgmt/simplepub.dev/packages/scoped_model阅读更多信息。

标签: flutter dart routes navigationbar


【解决方案1】:

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

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

【讨论】:

  • 感谢您的回复。我尝试这样做,但在推送后,BottomNavBar 从 pageOne 消失了
  • 哦,我想出了一个解决办法,谢谢!如果有人遇到同样的问题,我会更新我的问题,但我会接受你的回答。
猜你喜欢
  • 1970-01-01
  • 2022-07-27
  • 1970-01-01
  • 1970-01-01
  • 2019-10-13
  • 2020-04-20
  • 2011-06-29
  • 2018-01-05
  • 2013-04-02
相关资源
最近更新 更多