如何将小部件推送到上下文之外?
How to push a widget outside of context?
我当前的屏幕结构如下所示:
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)
],
),
),
)
所以我的问题是:有没有办法将这个小部件推到堆栈的“顶部”并忽略上下文,或者在这种情况下我是否只需要隐藏栏?你会怎么做?
谢谢
您可以用 Navigator
包裹 Scaffold
并使用 Navigator.of(context, rootNavigator: true).push(PageRouteBuilder(pageBuilder: (context, _, __) => Foo()));
将 Foo
小部件推到所有内容之上。
我当前的屏幕结构如下所示:
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)
],
),
),
)
所以我的问题是:有没有办法将这个小部件推到堆栈的“顶部”并忽略上下文,或者在这种情况下我是否只需要隐藏栏?你会怎么做?
谢谢
您可以用 Navigator
包裹 Scaffold
并使用 Navigator.of(context, rootNavigator: true).push(PageRouteBuilder(pageBuilder: (context, _, __) => Foo()));
将 Foo
小部件推到所有内容之上。