首页 > 解决方案 > OverlayEntry 捕获 PointerEvents,但也将它们转发到主应用程序

问题描述

在这里,我试图在应用程序之上创建一个 OverlayEntry,它应该:

本质是:

  Overlay.of(context).insert(
    OverlayEntry(
      builder: (context) => Listener(
        behavior: HitTestBehavior.translucent,
        onPointerMove: (event) => print(event),
        child: Text('Some more debug information'),
      ),
    ),
  );

但是,指针事件不会被转发到应用程序,而是被覆盖层“吞噬”。

标签: flutterflutter-layout

解决方案


结果比预期的要容易。我只需要将 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是必需的。如果我删除那条线,我就无法观察到这些事件。


推荐阅读