首页 > 解决方案 > Flutter web GestureDetector:检测鼠标滚轮事件

问题描述

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

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

理想情况下,我想要的是一个类似于 的小部件GestureDetector,其回调方法类似于和onPanStart,但发生在鼠标滚轮事件上(或者,以同样的方式,用于笔记本电脑上的触控板滚动事件)。onPanUpdateonPanEnd

有谁知道我怎么能做到这一点?

标签: flutterscroll

解决方案


Listener不需要任何父母。可以使用如下所示的小部件,它将其子组件包装在 a 中Listener,并在收到 a 时调用给定的回调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,
    );
  }
}

这是 DartPad 上的完整示例。


推荐阅读