From 0d221dc22ef2e5fab70f6f07467f43f22b73701e Mon Sep 17 00:00:00 2001 From: chunhtai <47866232+chunhtai@users.noreply.github.com> Date: Tue, 18 Jan 2022 13:25:32 -0800 Subject: [PATCH] Clean up mouse region code (#96636) * Clean up mouse region code * remove even more code --- packages/flutter/lib/src/widgets/basic.dart | 74 ++++++--------------- 1 file changed, 21 insertions(+), 53 deletions(-) diff --git a/packages/flutter/lib/src/widgets/basic.dart b/packages/flutter/lib/src/widgets/basic.dart index 2b088176a2f..3b98c7bcf78 100644 --- a/packages/flutter/lib/src/widgets/basic.dart +++ b/packages/flutter/lib/src/widgets/basic.dart @@ -6185,7 +6185,7 @@ class Listener extends SingleChildRenderObjectWidget { /// /// * [Listener], a similar widget that tracks pointer events when the pointer /// has buttons pressed. -class MouseRegion extends StatefulWidget { +class MouseRegion extends SingleChildRenderObjectWidget { /// Creates a widget that forwards mouse events to callbacks. /// /// By default, all callbacks are empty, [cursor] is [MouseCursor.defer], and @@ -6197,10 +6197,10 @@ class MouseRegion extends StatefulWidget { this.onHover, this.cursor = MouseCursor.defer, this.opaque = true, - this.child, + Widget? child, }) : assert(cursor != null), assert(opaque != null), - super(key: key); + super(key: key, child: child); /// Triggered when a mouse pointer has entered this widget. /// @@ -6347,13 +6347,26 @@ class MouseRegion extends StatefulWidget { /// This defaults to true. final bool opaque; - /// The widget below this widget in the tree. - /// - /// {@macro flutter.widgets.ProxyWidget.child} - final Widget? child; + @override + RenderMouseRegion createRenderObject(BuildContext context) { + return RenderMouseRegion( + onEnter: onEnter, + onHover: onHover, + onExit: onExit, + cursor: cursor, + opaque: opaque, + ); + } @override - State createState() => _MouseRegionState(); + void updateRenderObject(BuildContext context, RenderMouseRegion renderObject) { + renderObject + ..onEnter = onEnter + ..onHover = onHover + ..onExit = onExit + ..cursor = cursor + ..opaque = opaque; + } @override void debugFillProperties(DiagnosticPropertiesBuilder properties) { @@ -6371,51 +6384,6 @@ class MouseRegion extends StatefulWidget { } } -class _MouseRegionState extends State { - void handleExit(PointerExitEvent event) { - if (widget.onExit != null && mounted) - widget.onExit!(event); - } - - PointerExitEventListener? getHandleExit() { - return widget.onExit == null ? null : handleExit; - } - - @override - Widget build(BuildContext context) { - return _RawMouseRegion(this); - } -} - -class _RawMouseRegion extends SingleChildRenderObjectWidget { - _RawMouseRegion(this.owner) : super(child: owner.widget.child); - - final _MouseRegionState owner; - - @override - RenderMouseRegion createRenderObject(BuildContext context) { - final MouseRegion widget = owner.widget; - return RenderMouseRegion( - onEnter: widget.onEnter, - onHover: widget.onHover, - onExit: owner.getHandleExit(), - cursor: widget.cursor, - opaque: widget.opaque, - ); - } - - @override - void updateRenderObject(BuildContext context, RenderMouseRegion renderObject) { - final MouseRegion widget = owner.widget; - renderObject - ..onEnter = widget.onEnter - ..onHover = widget.onHover - ..onExit = owner.getHandleExit() - ..cursor = widget.cursor - ..opaque = widget.opaque; - } -} - /// A widget that creates a separate display list for its child. /// /// This widget creates a separate display list for its child, which