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