simulateSwipe method

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

Simula un swipe (deslizamiento) desde start hasta end en duration.

Interpolación lineal de 20 pasos usando Future.delayed para respetar el timing. Flutter necesita ver PointerMoveEvents intermedios para reconocer el gesto como swipe y no como tap largo.

Nota: los Future.delayed son fire-and-forget intencionales — el caller no necesita esperar a que todos los eventos se emitan porque Flutter los procesa en el mismo isolate de UI.

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),
    );
  });
}