Selaa lähdekoodia

fix: on hover/enter issue for view items (#3528)

Mathias Mogensen 1 vuosi sitten
vanhempi
commit
949dab9afe

+ 18 - 16
frontend/appflowy_flutter/packages/flowy_infra_ui/lib/style_widget/hover.dart

@@ -44,10 +44,11 @@ class _FlowyHoverState extends State<FlowyHover> {
 
   @override
   void didUpdateWidget(covariant FlowyHover oldWidget) {
-    if (widget.resetHoverOnRebuild == true) {
+    if (widget.resetHoverOnRebuild) {
       // Reset the _onHover to false when the parent widget get rebuild.
       _onHover = false;
     }
+
     super.didUpdateWidget(oldWidget);
   }
 
@@ -58,28 +59,29 @@ class _FlowyHoverState extends State<FlowyHover> {
       opaque: false,
       onHover: (p) {
         if (_onHover) return;
-
-        if (widget.buildWhenOnHover?.call() ?? true) {
-          setState(() => _onHover = true);
-          if (widget.onHover != null) {
-            widget.onHover!(true);
-          }
-        }
+        _setOnHover(true);
+      },
+      onEnter: (p) {
+        if (_onHover) return;
+        _setOnHover(true);
       },
       onExit: (p) {
-        if (_onHover == false) return;
-
-        if (widget.buildWhenOnHover?.call() ?? true) {
-          setState(() => _onHover = false);
-          if (widget.onHover != null) {
-            widget.onHover!(false);
-          }
-        }
+        if (!_onHover) return;
+        _setOnHover(false);
       },
       child: renderWidget(),
     );
   }
 
+  void _setOnHover(bool isHovering) {
+    if (widget.buildWhenOnHover?.call() ?? true) {
+      setState(() => _onHover = isHovering);
+      if (widget.onHover != null) {
+        widget.onHover!(isHovering);
+      }
+    }
+  }
+
   Widget renderWidget() {
     var showHover = _onHover;
     if (!showHover && widget.isSelected != null) {