Изменить индекс BottomNavigationBar нажатием кнопки - PullRequest
0 голосов
/ 30 октября 2019

У меня есть нижняя панель навигации, подобная этой:

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) => PageOne()} на routes: {'/home': (context) => Home()}

Home содержит класс BottomNavBar, поэтому он работает для «перезагрузки» приложения, перенаправляя пользователя на первую страницу.

1 Ответ

1 голос
/ 30 октября 2019

Вместо Navigator.pop(context), если вы просто хотите перейти к '/ pageOne' и удалить все предыдущие маршруты, вы можете сделать что-то вроде

  Navigator.of(context).pushNamedAndRemoveUntil(
      '/pageOne', (Route<dynamic> route) => false);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...