dispatch method

void dispatch(
  1. PointerEvent event,
  2. void next(
    1. PointerEvent event
    )
)

Dispatches event through next — the binding's own handlePointerEvent — inside its gesture's step.

A gesture is every pointer from the first down to the last up, so a second finger belongs to the step the first began.

Implementation

void dispatch(PointerEvent event, void Function(PointerEvent event) next) {
  if (event is PointerDownEvent) {
    (_gesture ??= _Gesture(
      '$_prefix.${++_count}',
      event,
    )).down.add(event.pointer);
  }
  var gesture = _gesture;
  if (gesture == null) return next(event);
  runZoned(() => next(event), zoneValues: {worldStepKey: gesture.id});
  if (event is PointerMoveEvent &&
      (event.position - gesture.first.position).distance > kTouchSlop) {
    gesture.moved = true;
  }
  if (event is PointerUpEvent || event is PointerCancelEvent) {
    gesture.down.remove(event.pointer);
    if (gesture.down.isNotEmpty) return;
    _gesture = null;
    _last = gesture.id;
    _lastAt = DateTime.now();
    var held = event.timeStamp - gesture.first.timeStamp;
    _report(worldStepsChannel, {
      'step': gesture.id,
      'verb': gesture.moved
          ? 'drag'
          : held >= kLongPressTimeout
          ? 'longPress'
          : 'tap',
      'target': describeHit(
        gesture.first.position,
        viewId: gesture.first.viewId,
      ),
    });
  }
}