【问题标题】:How to use an Overlay without the Navigator/App?如何在没有导航器/应用程序的情况下使用覆盖?
【发布时间】:2021-03-01 15:49:18
【问题描述】:

是否有任何代码示例展示如何使用独立于导航器小部件的覆盖?

在我们的应用程序中,我们不希望 TitleBar/AppBar 成为主导航堆栈的一部分,它应该保持在窗口的顶部,并且位置固定。

不过,TitleBar 需要访问 Overlay,因为它有各种工具提示和弹出面板。

我唯一知道这样做的是双包装 Navigator 或 MaterialApp,它们都很难闻。我想直接使用 Overlay,但没有任何关于如何实现它的指导。

查看 Overlay 的源代码并不能提供太多帮助,我也不想深入研究 MaterialApp 的数千行 src 代码。

[编辑] 稍微看一下 Navigator 的源代码,Overlay 似乎直接与 PageRoutes 耦合,这真是太可惜了:'(如果有一个简单的 Overlay(child: ) 我们可以使用就好了。

【问题讨论】:

    标签: flutter


    【解决方案1】:

    有一个声明性包用于使用名为 flutter_portal 的叠加层,它可以让您将叠加层显示为小部件树的一部分。

    PortalEntry(
      visible: true,
      portal: Material(
        elevation: 8,
        child: IntrinsicWidth(
          child: Column(
            mainAxisSize: MainAxisSize.min,
            children: [
              ListTile(title: Text('option 1')),
              ListTile(title: Text('option 2')),
            ],
          ),
        ),
      ),
      child: RaisedButton(...),
    ) 
    

    使用此设置,您可以使用单个布尔值(“可见”)打开和关闭叠加层,并且您不再需要调用 Overlay.insert 和 Overlay.remove。

    【讨论】:

      猜你喜欢
      • 2011-11-01
      • 2011-02-19
      • 2020-10-10
      • 1970-01-01
      • 2019-01-20
      • 2019-06-29
      • 2020-07-10
      • 2013-05-18
      • 1970-01-01
      相关资源
      最近更新 更多