Flutter web GestureDetector:检测鼠标滚轮事件

Dan*_* S. 9 scroll flutter

我正在开发一个用于网络的颤振应用程序,当我在小部件(不是滚动小部件)内滚动鼠标滚轮时,我试图执行回调方法。

我知道这个MouseRegion小部件,并且使用 aListener作为它的子部件我可以检测onPointerSignal事件。Listener当 的子级是可滚动小部件(例如 )时,此方法可以正常工作ListView,但如果此小部件不可滚动,则此方法不起作用。

我理想地希望拥有一个类似于 的小部件GestureDetector,其回调方法类似于onPanStartonPanUpdateonPanEnd,但发生在鼠标滚轮事件上(或者以同样的方式发生在笔记本电脑上的触控板滚动事件上)。

有人知道我怎样才能实现这个目标吗?

hac*_*024 11

Listener不需要任何父母。可以使用如下所示的小部件,它将其子部件包装在 a 中,并在收到Listenera 时调用给定的回调:PointerScrollEvent

class ScrollDetector extends StatelessWidget {
  final void Function(PointerScrollEvent event) onPointerScroll;
  final Widget child;

  const ScrollDetector({
    Key key,
    @required this.onPointerScroll,
    @required this.child,
  }) : super(key: key);

  @override
  Widget build(BuildContext context) {
    return Listener(
      onPointerSignal: (pointerSignal) {
        if (pointerSignal is PointerScrollEvent) onPointerScroll(pointerSignal);
      },
      child: child,
    );
  }
}
Run Code Online (Sandbox Code Playgroud)

这是 DartPad 上的完整示例。