flutter - OverlayEntry 捕获 PointerEvents,但也将它们转发到主应用程序
问题描述
在这里,我试图在应用程序之上创建一个 OverlayEntry,它应该:
- 捕获,但也转发指针事件
- 渲染一些信息
本质是:
Overlay.of(context).insert(
OverlayEntry(
builder: (context) => Listener(
behavior: HitTestBehavior.translucent,
onPointerMove: (event) => print(event),
child: Text('Some more debug information'),
),
),
);
但是,指针事件不会被转发到应用程序,而是被覆盖层“吞噬”。
解决方案
结果比预期的要容易。我只需要将 Listener 的孩子包装到 IgnorePointer 中:
@override
void initState() {
super.initState();
scheduleMicrotask(
() => Overlay.of(context).insert(
OverlayEntry(
builder: (context) => Listener(
behavior: HitTestBehavior.translucent,
onPointerMove: (event) => print(event),
child: IgnorePointer(
child: Text('Some more debug information'),
),
),
),
),
);
}
尽管如此,与 的行behavior: HitTestBehavior.translucent
是必需的。如果我删除那条线,我就无法观察到这些事件。
推荐阅读
- google-api - 尝试使用 Python 的库在 GAPI Drive v3 中按文件 ID 查询时出错
- java - 尽管使用正确的输出编写了正确的代码,但仍获得 WA
- curl - curl:(6)无法解析主机:在 WSL 上
- linux - RPM post scriptlets 权限被 docker 命令拒绝
- azure-devops - 用于创建管道的 Azure Devops REST API 与源提供程序 bitbucket 不工作
- java - 提取名称,用双引号括起来从字符串到列表
- javascript - 特定用户的前端切换功能标志
- c# - 无法创建“AppDbContext”类型的对象
- javascript - Python socket.io ack 函数
- javascript - 如何将多个 then() 承诺合二为一