flutter - 如何在没有 Navigator/App 的情况下使用 Overlay?

标签 flutter

是否有任何代码示例显示如何使用独立于导航器小部件的叠加层?

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

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

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

寻找 Overlay 的源代码并没有太大帮助,我不想深入研究 MaterialApp 的数千行 src 代码。

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

最佳答案

有一个名为 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(...),
) 

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

关于flutter - 如何在没有 Navigator/App 的情况下使用 Overlay?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66425271/

相关文章:

ios - 如何在 flutter 中弹出到特定屏幕

flutter - 如何在 Flutter 中播放在线广播?

flutter - MaterialApp 中的主题在小部件 Flutter 中不起作用

dart - 具有 int 项目的 DropdownButton 不起作用,它不选择新值

android - WARN : Unable to load JNA library (OS: Mac OS X 12. 2) 在 Release模式下运行 flutter 应用程序时发出警告。 (M1 Mac)

java - 如何使用 IF 条件比较 Flutter(dart)中的两个 DateTime 值?

android - “未找到 Android 属性。”构建 Flutter aar 时出错

android - 获取 flutter 地点ID的地址

flutter - 如何仅在调用 onPressed 时更改 CupertinoButton 背景颜色

flutter - 我如何在 flutter [go router] 中使用 go router 插件进行推送替换