Search code examples
flutterdartflutter-layoutflutter-navigation

How to push a widget outside of context?


My current screenstructure looks like this:

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

the BottomNavigationBar is just a regular bar.

Each of those screens are wrapped with a OffStage() widget like this:

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

My intention with this was to ensure a BottomNavigationBar at all times.

However, there is one widget, that I want to push from FeedScreen() that I don't want the NavigationBar on, but the context makes it hard to hide this NavigationBar

This is the structure of the FeedScreen()

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

So my question is: Is there a way to push this Widget "on top" of the stack and kind of ignore the context or do I just have to hide the bar in this case? How would you do that?

Thanks


Solution

  • You can wrap you Scaffold with a Navigator and use Navigator.of(context, rootNavigator: true).push(PageRouteBuilder(pageBuilder: (context, _, __) => Foo())); to push the Foo widget on top of everything.