我有这个问题。我的主页有一个带有两个页面A和B的bottomNavigationBar。 页面A和B上的按钮可在点击时导航到其他没有底部导航栏的页面。现在,当我在其他页面中没有底部导航栏并想返回到我的主页时,即使用“ Navigator.of(context)”具有底部导航栏(A和B)的页面。 pushAndRemoveUntil(MaterialPageRoute(builder:(context)=> A()),(Route route)=> false),“,页面A中底部的导航栏消失了。当我导航到页面B时,也会发生同样的情况。 如何在不丢失底部导航栏的情况下“ pushAndRemoveUntil”到主页的任一页面(A和B)?
这是我实现底部导航栏的方式:
return Scaffold(
backgroundColor: Theme.of(context).backgroundColor,
body: PageView(
children: <Widget>[
A(),
B(),
],
controller: pageController,
onPageChanged: onPageChanged,
physics: NeverScrollableScrollPhysics(),
),
bottomNavigationBar: CupertinoTabBar(
backgroundColor: appbar_Color,
currentIndex: pageIndex,
onTap: onTap,
activeColor: Theme.of(context).primaryColor,
items: [
BottomNavigationBarItem(
title: Text("Page A"),
icon: Icon(Icons.whatshot),
),
BottomNavigationBarItem(
title: Text("Page B"),
icon: Icon(Icons.notifications_active),
),
],
),
);
我的onTap函数:
onTap(int pageIndex) {
pageController.animateToPage(pageIndex,
duration: Duration(milliseconds: 100), curve: Curves.easeInOut);
}
非常感谢您。
答案 0 :(得分:0)
您只需要在其他页面上调用Navigator.pop(context)
,因为它们只是当前包含2页PageView的Scaffold之上的堆栈。只需弹出页面即可,您将在同一屏幕上被重定向。
答案 1 :(得分:0)
您似乎并不想使用pushAndRemoveUntil
将给定的路由推送到导航器上,然后删除所有先前的路由,直到谓词返回true。看来您想使用pop
(返回一个视图)或popUntil
(返回直到找到请求的视图)
此命令将直接将您带到堆栈中的第一个视图
Navigator.of(context).popUntil((route) => route.isFirst);
这另一条命令将在堆栈中返回一个视图
Navigator.of(context).pop();