Flutter:当pushAndRemoveUntil到具有bottomNavigationBar的页面时,保留bottomNavigationBar

时间:2020-06-22 02:30:19

标签: flutter flutter-layout

我有这个问题。我的主页有一个带有两个页面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);
  }

非常感谢您。

2 个答案:

答案 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();