按下按钮即可更改BottomNavigationBar索引

时间:2019-10-29 22:43:17

标签: flutter dart routes navigationbar

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

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

我尝试在主机上使用路由,然后将其推到名为Route的'/ pageOne'。但是然后pageOne不会与BottomNavBar一起出现,而我想关闭的屏幕仍在小部件树中。我想完全弹出它,将用户重定向到第一页。

更新: 在路线工作中使用pushAndRemove:

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

我在路线上遇到的问题是在推送后BottomNavBar无法显示。但是要解决它,我改变了 routes: {'/pageOne': (context) => PageOne()}routes: {'/home': (context) => Home()}

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

1 个答案:

答案 0 :(得分:1)

如果您只想导航到'/ pageOne'并删除所有先前的路线,则可以代替Widget build(BuildContext context)

home: DefaultTabController(
  length: //your_choices,
  child: Builder(builder: (BuildContext context) {
    return Scaffold(
      bottomNavigationBar: BottomAppBar(
        child: new Row(
          mainAxisAlignment: MainAxisAlignment.end,
          children: <Widget>[
            FlatButton(
              onPressed: () {
                DefaultTabController.of(context).animateTo(DefaultTabController.of(context).index + 1);
              },
              child: new Text('Next >'),
            ),
          ],
        ),
      ),
      appBar: ...
      body: ...
    );
  }),
)