如何在 Flutter 中测试 LongPressDraggable

How to test a LongPressDraggable in Flutter

我想在 Flutter 中测试 LongPressDraggable。 WidgetTester 提供类似 longPress 的方法或几种拖动方法。 但是没有“longPressDrag”或类似的东西。 第一个想法是 运行 长按和拖动。但是在长按之后,小部件测试器没有按住小部件,我无法拖动它。

await tester.longPress(from);
await tester.timedDrag(from, offset, Duration(milliseconds: time));

解决方法是使用 timedDrag 并且 运行 它超级慢。 这可行,但需要很多时间。

await tester.timedDrag(from, offset, Duration(seconds: 15));

是否有正确的方法来测试小部件?

使用startGesture方法开始你自己的手势。 “手指被按下”,直到您调用 geseture.up()。在开始和向上之间使用 gesture.moveTo 移动光标和 tester.pump(duration) 停留在某个位置以触发 long-press.

示例代码来自 draggable_test.dart

中的 flutter repo
    final Offset firstLocation = tester.getCenter(find.text('Source'));
    final TestGesture gesture = await tester.startGesture(firstLocation, pointer: 7);
    await tester.pump();

    expect(targetMoveCount['Target 1'], equals(0));
    expect(targetMoveCount['Target 2'], equals(0));

    final Offset secondLocation = tester.getCenter(find.text('Target 1'));
    await gesture.moveTo(secondLocation);
    await tester.pump();

    expect(targetMoveCount['Target 1'], equals(1));
    expect(targetMoveCount['Target 2'], equals(0));

    final Offset thirdLocation = tester.getCenter(find.text('Target 2'));
    await gesture.moveTo(thirdLocation);
    await tester.pump();

    expect(targetMoveCount['Target 1'], equals(1));
    expect(targetMoveCount['Target 2'], equals(1));

    await gesture.moveTo(secondLocation);
    await tester.pump();

    expect(targetMoveCount['Target 1'], equals(2));
    expect(targetMoveCount['Target 2'], equals(1));

    await gesture.up();
    await tester.pump();