simulateSwipe method

void simulateSwipe(
  1. Offset start,
  2. Offset end,
  3. Duration duration
)

Simulates a swipe from start to end over duration.

Linear interpolation of 20 steps using Future.delayed to respect timing. Flutter needs to see intermediate PointerMoveEvents to recognize the gesture as a swipe and not as a long press.

Note: the Future.delayed calls are intentionally fire-and-forget — the caller does not need to wait for all events to be emitted because Flutter processes them on the same UI isolate.

Implementation

void simulateSwipe(Offset start, Offset end, Duration duration) {
  const steps = 20;
  final stepMs = duration.inMilliseconds ~/ steps;
  final pointer = _nextPointer;

  Log.i(
    '[Gesture] 👉 SWIPE de $start a $end (${duration.inMilliseconds}ms, $steps pasos)',
  );

  GestureBinding.instance.handlePointerEvent(
    PointerDownEvent(position: start, pointer: pointer),
  );

  for (int i = 1; i <= steps; i++) {
    final t = i / steps;
    final pos = Offset.lerp(start, end, t)!;
    Future.delayed(Duration(milliseconds: stepMs * i), () {
      GestureBinding.instance.handlePointerEvent(
        PointerMoveEvent(position: pos, pointer: pointer),
      );
    });
  }

  Future.delayed(duration, () {
    GestureBinding.instance.handlePointerEvent(
      PointerUpEvent(position: end, pointer: pointer),
    );
  });
}