如何在Flutter的小部件测试中执行缩放(捏缩放)多手指手势?

时间:2020-03-08 15:33:06

标签: flutter dart gesture flutter-test

我正在为一个小部件编写小部件测试,当用户通过使用GestureDetector属性回调实例化一个onScaleUpdate来对其执行缩放手势时,该小部件可以处理动作。我知道如何在小部件测试中执行拖动,点击和长按,但是我找不到在小部件测试中执行缩放手势的方法。

我尝试了几种方法,例如在相反方向上同时拖动:

final myWidget = find.byKey(const Key("myWidget"));
await tester.drag(myWidget, Offset(100, 0));
await tester.drag(myWidget, Offset(-100, 0));

但是拖动不能同时发生,框架迫使我进行await直到完成一次拖动才执行第二次拖动。

在小部件测试中有什么方法可以执行缩放/捏到缩放/多指手势?

1 个答案:

答案 0 :(得分:1)

您可以使用 WidgetTestercreateGesture()startGesture() 方法来创建两个或多个触摸并控制它们。下面是一个例子:

    final widgetFinder = find.byKey(ValueKey('Scalable widget'));
    final center = tester.getCenter(widgetFinder);
    
    // create two touches:
    final touch1 = await tester.startGesture(center.translate(-10, 0));
    final touch2 = await tester.startGesture(center.translate(10, 0));

    // zoom in:
    await touch1.moveBy(Offset(-100, 0));
    await touch2.moveBy(Offset(100, 0));
    await tester.pump();
    
    // zoom out:
    await touch1.moveBy(Offset(10, 0));
    await touch2.moveBy(Offset(-10, 0));
    await tester.pump();
    
    // cancel touches:
    await touch1.cancel();
    await touch2.cancel();