diff --git a/packages/flutter/lib/src/gestures/binding.dart b/packages/flutter/lib/src/gestures/binding.dart index b64b72d0a5a..ff67173b20c 100644 --- a/packages/flutter/lib/src/gestures/binding.dart +++ b/packages/flutter/lib/src/gestures/binding.dart @@ -17,7 +17,7 @@ import 'hit_test.dart'; import 'pointer_router.dart'; /// A binding for the gesture subsystem. -abstract class Gesturer extends BindingBase implements HitTestTarget, HitTestable { +abstract class Gesturer extends BindingBase implements HitTestable, HitTestDispatcher, HitTestTarget { @override void initInstances() { @@ -75,12 +75,17 @@ abstract class Gesturer extends BindingBase implements HitTestTarget, HitTestabl } /// Determine which [HitTestTarget] objects are located at a given position. - @override + @override // from HitTestable void hitTest(HitTestResult result, Point position) { result.add(new HitTestEntry(this)); } - /// Dispatch the given event to the path of the given hit test result + /// Dispatch an event to a hit test result's path. + /// + /// This sends the given event to every [HitTestTarget] in the entries + /// of the given [HitTestResult], and catches exceptions that any of + /// the handlers might throw. The `result` argument must not be null. + @override // from HitTestDispatcher void dispatchEvent(PointerEvent event, HitTestResult result) { assert(result != null); for (HitTestEntry entry in result.path) { @@ -105,7 +110,7 @@ abstract class Gesturer extends BindingBase implements HitTestTarget, HitTestabl } } - @override + @override // from HitTestTarget void handleEvent(PointerEvent event, HitTestEntry entry) { pointerRouter.route(event); if (event is PointerDownEvent) { diff --git a/packages/flutter/lib/src/gestures/hit_test.dart b/packages/flutter/lib/src/gestures/hit_test.dart index 047b4b08183..6d3e8e8c180 100644 --- a/packages/flutter/lib/src/gestures/hit_test.dart +++ b/packages/flutter/lib/src/gestures/hit_test.dart @@ -9,6 +9,12 @@ abstract class HitTestable { // ignore: one_member_abstracts void hitTest(HitTestResult result, Point position); } +/// An object that can dispatch events. +abstract class HitTestDispatcher { // ignore: one_member_abstracts + /// Override this function to dispatch events. + void dispatchEvent(PointerEvent event, HitTestResult result); +} + /// An object that can handle events. abstract class HitTestTarget { // ignore: one_member_abstracts /// Override this function to receive events.