【问题标题】:How to push a widget outside of context?如何将小部件推送到上下文之外?
【发布时间】:2021-04-05 05:19:09
【问题描述】:

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

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)
          ],
        ),
      ),
    )

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

谢谢

【问题讨论】:

  • 您想将 (Navigator.push) 从 FeedScreen 推送到另一个小部件?
  • 是的,但由于堆栈,目前我正在另一个小部件上获取 NavigationBar。我只想在我正在推送的这个新小部件上避免使用 NavigationBar。
  • NavigationBar,你的意思是Android导航栏?
  • 不,我的意思是底部导航栏
  • 发布FeedScreen内容

标签: flutter dart flutter-layout flutter-navigation


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 2016-01-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多