首页 > 解决方案 > 如何将小部件推送到上下文之外?

问题描述

我当前的屏幕结构如下所示:

Scaffold(
        body: Stack(
          children: [
            _buildOffstageNavigator(FeedScreen()),
            _buildOffstageNavigator(Screen2()),
            _buildOffstageNavigator(Screen3()),
          ],
        ),
        bottomNavigationBar: buildBottomNavigationBar(),
      )

BottomNavigationBar 只是一个常规栏。

每个屏幕都包含一个 OffStage() 小部件,如下所示:

 Widget _buildOffstageNavigator(Widget screenToBuild) {
    return Offstage(
      offstage: currentPage != screenToBuild,
      child: TabNavigator(
        navigatorKey: _navigatorKeys[screenToBuild],
        screenToBuild: screenToBuild,
      ),
    );
  }

我这样做的目的是确保始终有一个 BottomNavigationBar。

但是,有一个小部件,我想从中推送FeedScreen()我不想要的NavigationBar,但是上下文使得很难隐藏它NavigationBar

这是结构FeedScreen()

Scaffold(
      appBar: buildAppBar(),
      body: SingleChildScrollView(
        key: PageStorageKey<String>("Feed"),
        controller: _feedSC,
        child: Column(
          children: [
            buildStoriesListView(),
            buildPostsListView(posts)
          ],
        ),
      ),
    )

所以我的问题是:有没有办法将这个小部件“推到”堆栈的顶部并忽略上下文,或者在这种情况下我只需要隐藏栏?你会怎么做?

谢谢

标签: flutterdartflutter-layoutflutter-navigation

解决方案


您可以Scaffold用 a包裹您Navigator并使用将小部件Navigator.of(context, rootNavigator: true).push(PageRouteBuilder(pageBuilder: (context, _, __) => Foo()));推送到Foo所有内容之上。


推荐阅读