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