Browse Source

fix(measure): 修正注释无法清除 #0009569 Review by loki

gavin.chen 2 years ago
parent
commit
9784884799

+ 1 - 0
lib/process/annotations/label_annotation.dart

@@ -34,6 +34,7 @@ class LabelAnnotation extends AnnotationItem<LabelAnnotationItemFeature> {
       }
       if (args.pointType == PointInfoType.mouseUp) {
         feature = LabelAnnotationItemFeature(this, args);
+        doFeatureFinish();
       }
     }
     return true;

+ 7 - 8
lib/view/gesture/annotation/annotation_gesture.dart

@@ -1,6 +1,7 @@
 import 'package:fis_measure/interfaces/enums/annotation.dart';
 import 'package:fis_measure/interfaces/process/annotations/annotation.dart';
 import 'package:fis_measure/interfaces/process/workspace/application.dart';
+import 'package:fis_measure/view/gesture/mouse_gesture.dart';
 import 'package:flutter/material.dart';
 import 'package:get/get.dart';
 
@@ -19,11 +20,9 @@ class AnnotationGestureLayer extends StatefulWidget {
 
 class _AnnotationGestureLayerState extends State<AnnotationGestureLayer> {
   late final application = Get.find<IApplication>();
-
   final mouseState = Get.find<IMouseState>();
 
   IAnnotationItem? currentItem;
-
   @override
   void initState() {
     currentItem = application.activeAnnotationItem;
@@ -53,12 +52,12 @@ class _AnnotationGestureLayerState extends State<AnnotationGestureLayer> {
   Widget build(BuildContext context) {
     return _buildItemPanel();
     // TODO: melon - optimize with handlers
-    return Stack(
-      children: [
-        _buildItemPanel(),
-        _buildTopGesture(),
-      ],
-    );
+    // return Stack(
+    //   children: [
+    //     _buildItemPanel(),
+    //     _buildTopGesture(),
+    //   ],
+    // );
   }
 
   Widget _buildTopGesture() {

+ 25 - 2
lib/view/gesture/annotation/arrow_gesture_panel.dart

@@ -1,5 +1,6 @@
 import 'package:fis_measure/interfaces/process/workspace/application.dart';
 import 'package:fis_measure/interfaces/process/workspace/point_info.dart';
+import 'package:fis_measure/view/gesture/mouse_gesture.dart';
 import 'package:flutter/material.dart';
 import 'package:get/get.dart';
 
@@ -15,6 +16,7 @@ class AnnotationArrowGesturePanel extends StatefulWidget {
 
 class _PanelState extends State<AnnotationArrowGesturePanel> {
   late final application = Get.find<IApplication>();
+  CursorDisplayType displayType = CursorDisplayType.none;
 
   final mouseState = Get.find<IMouseState>();
 
@@ -31,10 +33,20 @@ class _PanelState extends State<AnnotationArrowGesturePanel> {
         mouseState.mousePosition = details.localPosition;
       },
       child: MouseRegion(
+        onEnter: (e) {
+          setState(() {
+            displayType = CursorDisplayType.normal;
+          });
+        },
+        onExit: (e) {
+          setState(() {
+            displayType = CursorDisplayType.none;
+          });
+        },
         cursor: SystemMouseCursors.none,
         child: Stack(
-          children: const [
-            PositionedCursor(),
+          children: [
+            _buildCursor(),
           ],
         ),
         onHover: (event) {
@@ -47,4 +59,15 @@ class _PanelState extends State<AnnotationArrowGesturePanel> {
       ),
     );
   }
+
+  Widget _buildCursor() {
+    switch (displayType) {
+      case CursorDisplayType.none:
+        return Container();
+      case CursorDisplayType.normal:
+        return const PositionedCursor();
+      default:
+        return const PositionedCursor();
+    }
+  }
 }

+ 24 - 1
lib/view/gesture/annotation/input_position_panel.dart

@@ -3,6 +3,7 @@
 import 'package:fis_measure/interfaces/process/workspace/application.dart';
 import 'package:fis_measure/interfaces/process/workspace/point_info.dart';
 import 'package:fis_measure/values/colors.dart';
+import 'package:fis_measure/view/gesture/mouse_gesture.dart';
 import 'package:flutter/material.dart';
 import 'package:get/get.dart';
 
@@ -19,6 +20,7 @@ class AnnotationInputPositionPanel extends StatefulWidget {
 class _PanelState extends State<AnnotationInputPositionPanel> {
   late final application = Get.find<IApplication>();
   final mouseState = Get.find<IMouseState>();
+  CursorDisplayType displayType = CursorDisplayType.none;
 
   Offset? position;
 
@@ -40,6 +42,16 @@ class _PanelState extends State<AnnotationInputPositionPanel> {
                 _InputWidget.C_MAX_HEIGHT / 2,
               );
         },
+        onEnter: (e) {
+          setState(() {
+            displayType = CursorDisplayType.normal;
+          });
+        },
+        onExit: (e) {
+          setState(() {
+            displayType = CursorDisplayType.none;
+          });
+        },
         child: Stack(
           children: [
             if (position != null)
@@ -53,12 +65,23 @@ class _PanelState extends State<AnnotationInputPositionPanel> {
                 left: position!.dx,
                 top: position!.dy,
               ),
-            const PositionedCursor(),
+            _buildCursor(),
           ],
         ),
       ),
     );
   }
+
+  Widget _buildCursor() {
+    switch (displayType) {
+      case CursorDisplayType.none:
+        return Container();
+      case CursorDisplayType.normal:
+        return const PositionedCursor();
+      default:
+        return const PositionedCursor();
+    }
+  }
 }
 
 typedef _InputValueChanged = void Function(String value);

+ 50 - 32
lib/view/gesture/annotation/label_drag_target_pannel.dart

@@ -1,6 +1,7 @@
 import 'package:fis_measure/interfaces/enums/annotation.dart';
 import 'package:fis_measure/interfaces/process/workspace/application.dart';
 import 'package:fis_measure/interfaces/process/workspace/point_info.dart';
+import 'package:fis_measure/view/gesture/mouse_gesture.dart';
 import 'package:flutter/material.dart';
 import 'package:get/get.dart';
 
@@ -17,47 +18,54 @@ class AnnotationLabelDragTargetPanel extends StatefulWidget {
 class _PanelState extends State<AnnotationLabelDragTargetPanel> {
   late final application = Get.find<IApplication>();
   final mouseState = Get.find<IMouseState>();
+  CursorDisplayType displayType = CursorDisplayType.none;
 
   @override
   void initState() {
-    // TODO: implement initState
     super.initState();
   }
 
   @override
   Widget build(BuildContext context) {
-    return Container(
-      // color: Colors.green,
-      child: DragTarget<String>(
-        builder: (context, candidateData, rejectedData) {
-          return GestureDetector(
-            onPanDown: (details) {
-              application.createPointInfo(
-                details.localPosition,
-                PointInfoType.mouseDown,
-              );
-              application.switchAnnotation(AnnotationType.input);
+    return DragTarget<String>(
+      builder: (context, candidateData, rejectedData) {
+        return GestureDetector(
+          onPanDown: (details) {
+            application.createPointInfo(
+              details.localPosition,
+              PointInfoType.mouseDown,
+            );
+            application.switchAnnotation(AnnotationType.input);
+          },
+          child: MouseRegion(
+            cursor: SystemMouseCursors.none,
+            onHover: (event) {
+              mouseState.mousePosition = event.localPosition;
             },
-            child: MouseRegion(
-              cursor: SystemMouseCursors.none,
-              onHover: (event) {
-                mouseState.mousePosition = event.localPosition;
-              },
-              child: Stack(
-                children: const [
-                  PositionedCursor(),
-                ],
-              ),
+            onEnter: (e) {
+              setState(() {
+                displayType = CursorDisplayType.normal;
+              });
+            },
+            onExit: (e) {
+              setState(() {
+                displayType = CursorDisplayType.none;
+              });
+            },
+            child: Stack(
+              children: [
+                _buildCursor(),
+              ],
             ),
-          );
-        },
-        onMove: (details) {
-          _notifyPosition(context, details.offset, PointInfoType.mouseMove);
-        },
-        onAcceptWithDetails: (details) {
-          _notifyPosition(context, details.offset, PointInfoType.mouseUp);
-        },
-      ),
+          ),
+        );
+      },
+      onMove: (details) {
+        _notifyPosition(context, details.offset, PointInfoType.mouseMove);
+      },
+      onAcceptWithDetails: (details) {
+        _notifyPosition(context, details.offset, PointInfoType.mouseUp);
+      },
     );
   }
 
@@ -77,9 +85,19 @@ class _PanelState extends State<AnnotationLabelDragTargetPanel> {
     return renderBox.globalToLocal(globalPosition);
   }
 
+  Widget _buildCursor() {
+    switch (displayType) {
+      case CursorDisplayType.none:
+        return Container();
+      case CursorDisplayType.normal:
+        return const PositionedCursor();
+      default:
+        return const PositionedCursor();
+    }
+  }
+
   @override
   void dispose() {
-    // TODO: implement dispose
     super.dispose();
   }
 }

+ 3 - 0
lib/view/measure/drag_delete_area.dart

@@ -36,6 +36,9 @@ class DragDeleteAreaState extends FState<DragDeleteArea> {
         if (result ?? false) {
           PromptBox.toast(i18nBook.measure.annotationDeleted.translate([data]));
         }
+        setState(() {
+          _isDragOn = false;
+        });
       },
       onWillAccept: (data) {
         setState(() {

+ 0 - 8
lib/view/measure/measure_tool.dart

@@ -140,15 +140,7 @@ class LeftSiderSelectMeasureState extends FState<LeftSiderSelectMeasure> {
       annotationList.add(element.text ?? '');
     });
     measureData.annotationList = annotationList;
-
-    ///TODO:[Gavin] 在自定义的注释项加入删除按钮
     measureHandler.onAnnotationsLoaded();
-    print('measureData.annotationList:${measureData.annotationList}');
-
-    /// print 每一个注释
-    measureData.annotationList.forEach((element) {
-      print('element:$element');
-    });
   }
 
   void _getMeasureItemsList(VidUsImage e) async {

+ 2 - 1
lib/view/mobile_view/mobile_top_menu.dart

@@ -135,7 +135,8 @@ class _MobileTopMenuState extends State<MobileTopMenu> {
     return SingleIconButton(
       icon: Icons.edit,
       onPressed: () {
-        print("call 进入撰写报告");
+        //TODO 进入撰写报告
+        // print("call 进入撰写报告");
       },
     );
   }