Flutter 如何在颤振小部件测试中测试鼠标滚动事件?

Flutter 如何在颤振小部件测试中测试鼠标滚动事件?,flutter,flutter-test,Flutter,Flutter Test,我已经将PageView小部件包装在Listener小部件中。如果pointerSignal是PointerScrollEvent,我会在onPointerSignal属性中进行检查,以检测用户是否使用鼠标滚轮在小部件上滚动。然后,它不再执行奇怪的行为,而是生成IanimateToPage,并将页面视图的physics属性设置为NeverScrollableScrollPhysics(),这样它就不会干扰animateToPage转换 这真的很酷!它通过移动鼠标滚轮,以平滑的动画从一页跳到另一页

我已经将
PageView
小部件包装在
Listener
小部件中。如果
pointerSignal
PointerScrollEvent
,我会在
onPointerSignal
属性中进行检查,以检测用户是否使用鼠标滚轮在小部件上滚动。然后,它不再执行奇怪的行为,而是生成I
animateToPage
,并将页面视图的
physics
属性设置为
NeverScrollableScrollPhysics()
,这样它就不会干扰
animateToPage
转换

这真的很酷!它通过移动鼠标滚轮,以平滑的动画从一页跳到另一页

但是当通过小部件测试来测试行为时,乐趣就来了。是否有人知道如何发出/分派
指针CrolleEvent
?我试过以下方法,但没有成功

void main() {
  testWidgets(
    'when mouse wheel moved forward then next page is shown',
    (WidgetTester tester) async {
      await tester.pumpWidget(
        Test(
          child: PointerAwarePageView(
            children: [
              Text('1'),
              Text('2'),
            ],
          ),
        ),
      );

      expect(find.text('1'), findsOneWidget);

      tester.dispatchEvent(
        PointerScrollEvent(scrollDelta: Offset(0.0, 1.0)),
        HitTestResult(),
      );
      await tester.pump(Duration(seconds: 3));

      expect(find.text('2'), findsOneWidget);
    },
  );
}

最后,我找到了一个方法。这个颤振测试启发了我:

我们需要使用鼠标设备种类创建一个
TestPointer
,并执行滚动。然后通过
WidgetTester
发送事件

我将在这里写下我的工作结果测试:

void main(){
测试小部件(
'滚动鼠标滚轮时,将显示下一页',
(WidgetTester测试仪)异步{
等待测试仪.pumpWidget(
试验(
子:PointerWarePageView(
儿童:[
文本(“1”),
文本('2'),
],
),
),
);
expect(find.text('1'),findsOneWidget);
最终偏移量scrollEventLocation=tester.getCenter(find.byType(PointerWarePageView));
final TestPointer TestPointer=TestPointer(1,PointerDeviceKind.mouse);
hover(scrollEventLocation);
最终HitTestResult=tester.hitTestOnBinding(scrollEventLocation);
等待tester.sendEventToBinding(testPointer.scroll(常量偏移量(0.0,1.0)),结果);
等待测试仪。泵和沉降器();
expect(find.text('2'),findsOneWidget);
},
);
}

它对您有帮助吗@不幸的是,在那次测试中,它们并没有真正触发事件。我需要知道
widgettest
中的哪些特定函数允许我触发
PointerScrollEvent