0

我想在 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));

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

4

1 回答 1

1

使用该startGesture方法开始您自己的手势。“手指被按下”直到您调用geseture.up()。在启动和启动之间使用gesture.moveTo移动光标并tester.pump(duration)保持静止在某个位置以触发长按。

来自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();
于 2022-02-15T22:42:11.280 回答