addAllowedPointer method

  1. @override
void addAllowedPointer(
  1. PointerDownEvent event
)
override

Registers a new pointer that's been checked to be allowed by this gesture recognizer.

Subclasses of GestureRecognizer are supposed to override this method instead of addPointer because addPointer will be called for each pointer being added while addAllowedPointer is only called for pointers that are allowed by this recognizer.

Implementation

@override
void addAllowedPointer(PointerDownEvent event) {
  if (!hasDrag && !hasScale) {
    return;
  }
  assert(
    !_drag.pointers.containsKey(event.pointer),
    'Pointer ${event.pointer} is already tracked by this recognizer.',
  );
  final state = _DragPointerState(recognizer: this, event: event);
  _drag.pointers[event.pointer] = state;
  GestureBinding.instance.pointerRouter.addRoute(event.pointer, _handleEvent);
  state.arenaEntry = GestureBinding.instance.gestureArena.add(
    event.pointer,
    this,
  );

  if (hasScale) {
    if (_drag.count <= 2) {
      // Re-baseline focal point and spans on the first two pointer-down
      // events. For count==1 the span is zero; for count==2 the 2-finger
      // midpoint differs from the single-finger initial position, so we
      // reset both. For 3+ pointers the gesture is already in progress;
      // leave the baseline unchanged.
      _updateScaleFields();
      _scale.initialFocalPoint = _scale.currentFocalPoint;
      _scale.initialSpan = _scale.currentSpan;
      _scale.initialHorizontalSpan = _scale.currentHorizontalSpan;
      _scale.initialVerticalSpan = _scale.currentVerticalSpan;
    }
  }
}