GestureBinding mixin

A binding for the gesture subsystem.

Lifecycle of pointer events and the gesture arena


When a PointerDownEvent is received by the GestureBinding (from Window.onPointerDataPacket, as interpreted by the PointerEventConverter), a hitTest is performed to determine which HitTestTarget nodes are affected. (Other bindings are expected to implement hitTest to defer to HitTestable objects. For example, the rendering layer defers to the RenderView and the rest of the render object hierarchy.)

The affected nodes then are given the event to handle (dispatchEvent calls HitTestTarget.handleEvent for each affected node). If any have relevant GestureRecognizers, they provide the event to them using GestureRecognizer.addPointer. This typically causes the recognizer to register with the PointerRouter to receive notifications regarding the pointer in question.

Once the hit test and dispatching logic is complete, the event is then passed to the aforementioned PointerRouter, which passes it to any objects that have registered interest in that event.

Finally, the gestureArena is closed for the given pointer (GestureArenaManager.close), which begins the process of selecting a gesture to win that pointer.

Other events

A pointer that is PointerEvent.down may send further events, such as PointerMoveEvent, PointerUpEvent, or PointerCancelEvent. These are sent to the same HitTestTarget nodes as were found when the down event was received (even if they have since been disposed; it is the responsibility of those objects to be aware of that possibility).

Then, the events are routed to any still-registered entrants in the PointerRouter's table for that pointer.

When a PointerUpEvent is received, the GestureArenaManager.sweep method is invoked to force the gesture arena logic to terminate if necessary.

Superclass Constraints
Implemented by




gestureArena GestureArenaManager
The gesture arenas used for disambiguating the meaning of sequences of pointer events.
pointerRouter PointerRouter
A router that routes all pointer events received from the engine.
hashCode int
The hash code for this object. [...]
read-only, inherited
locked bool
Whether lockEvents is currently locking events. [...]
@protected, read-only, inherited
runtimeType Type
A representation of the runtime type of the object.
read-only, inherited
window Window
The window to which this binding is bound. [...]
read-only, inherited


cancelPointer(int pointer) → void
Dispatch a PointerCancelEvent for the given pointer soon. [...]
dispatchEvent(PointerEvent event, HitTestResult hitTestResult) → void
Dispatch an event to a hit test result's path. [...]
handleEvent(PointerEvent event, HitTestEntry entry) → void
Override this method to receive events.
hitTest(HitTestResult result, Offset position) → void
Determine which HitTestTarget objects are located at a given position.
initInstances() → void
The initialization method. Subclasses override this method to hook into the platform and otherwise configure their services. Subclasses must call "super.initInstances()". [...]
unlocked() → void
Called by lockEvents when events get unlocked. [...]
initServiceExtensions() → void
Called when the binding is initialized, to register service extensions. [...]
@mustCallSuper, @protected, inherited
lockEvents(Future<void> callback()) Future<void>
Locks the dispatching of asynchronous events and callbacks until the callback's future completes. [...]
@protected, inherited
noSuchMethod(Invocation invocation) → dynamic
Invoked when a non-existent method or property is accessed. [...]
performReassemble() Future<void>
This method is called by reassembleApplication to actually cause the application to reassemble, e.g. after a hot reload. [...]
@mustCallSuper, @protected, inherited
postEvent(String eventKind, Map<String, dynamic> eventData) → void
All events dispatched by a BindingBase use this method instead of calling developer.postEvent directly so that tests for BindingBase can track which events were dispatched by overriding this method.
@protected, inherited
reassembleApplication() Future<void>
Cause the entire application to redraw, e.g. after a hot reload. [...]
registerBoolServiceExtension({String name, AsyncValueGetter<bool> getter, AsyncValueSetter<bool> setter }) → void
Registers a service extension method with the given name (full name ""), which takes a single argument "enabled" which can have the value "true" or the value "false" or can be omitted to read the current value. (Any value other than "true" is considered equivalent to "false". Other arguments are ignored.) [...]
@protected, inherited
registerNumericServiceExtension({String name, AsyncValueGetter<double> getter, AsyncValueSetter<double> setter }) → void
Registers a service extension method with the given name (full name ""), which takes a single argument with the same name as the method which, if present, must have a value that can be parsed by double.parse, and can be omitted to read the current value. (Other arguments are ignored.) [...]
@protected, inherited
registerServiceExtension({String name, ServiceExtensionCallback callback }) → void
Registers a service extension method with the given name (full name ""). [...]
@protected, inherited
registerSignalServiceExtension({String name, AsyncCallback callback }) → void
Registers a service extension method with the given name (full name ""), which takes no arguments and returns no value. [...]
@protected, inherited
registerStringServiceExtension({String name, AsyncValueGetter<String> getter, AsyncValueSetter<String> setter }) → void
Registers a service extension method with the given name (full name ""), which optionally takes a single argument with the name "value". If the argument is omitted, the value is to be read, otherwise it is to be set. Returns the current value. [...]
@protected, inherited
toString() String
Returns a string representation of this object.


operator ==(dynamic other) bool
The equality operator. [...]

Static Properties

instance GestureBinding
The singleton instance of this object.