У меня есть нижняя панель навигации, подобная этой:
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, поэтому он работает для «перезагрузки» приложения, перенаправляя пользователя на первую страницу.