flutter - 如何将小部件推送到上下文之外?
问题描述
我当前的屏幕结构如下所示:
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)
],
),
),
)
所以我的问题是:有没有办法将这个小部件“推到”堆栈的顶部并忽略上下文,或者在这种情况下我只需要隐藏栏?你会怎么做?
谢谢
解决方案
您可以Scaffold
用 a包裹您Navigator
并使用将小部件Navigator.of(context, rootNavigator: true).push(PageRouteBuilder(pageBuilder: (context, _, __) => Foo()));
推送到Foo
所有内容之上。
推荐阅读
- python - Python:我尝试使用 tabula:ModuleNotFoundError: No module named 'tabula'
- node.js - 无法在量角器的电子邮件内容中提供换行符
- typescript - 使用可选属性的联合类型
- haskell - Haskell - 尝试 Monad 实例 - 语法问题
- ios - 异步队列如何与此示例代码一起使用
- php - 关闭一个浏览器选项卡时销毁会话
- c# - 如何让 Win32_Process 查询更快?
- javascript - Materialise CSS 在提交时验证所有表单字段
- c# - 如何在 linq 左连接查询中使用现有左模型预填充投影结果
- vba - 访问 VBA - 使用实际表的名称向现有表添加新列