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

标签 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直到拖动完成,然后再执行第二次拖动。

有没有办法在小部件测试中执行缩放/双指缩放/多指手势?

最佳答案

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

    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();

关于flutter - 如何在 Flutter 的小部件测试中执行缩放(捏合缩放)多指手势?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60589055/

相关文章:

google-maps - Flutter 绘制多条折线颜色

flutter - 'Future<dynamic>'类型不是'List <Profile>类型的子类型

SwiftUI:如果在 ScrollView 中滚动,则禁用按钮选择

firebase - 如何从Firebase存储中获取所有图像?

dart - 我如何制作列表并单击项目以导航到新路线

ios - 检测摇动手势 IOS Swift

android - 多次调用 onDraw() 的手势检测器

flutter - 在 Flutter 中,什么时候你更喜欢 `Widget` 继承而不是组合?

android - 如何在 Flutter App 中处理 onPause/onResume?

android - Flutter - 键盘隐藏时TextFormField变为空白