Browse Source

update(annotation): 修正注释无法撤销 #0009954 Review by melon

gavin.chen 2 years ago
parent
commit
56a556e429

+ 22 - 8
lib/view/measure/measure_main_view.dart

@@ -409,32 +409,38 @@ class _MeasureMainViewState extends State<MeasureMainView> {
                                     playerController as VidPlayerController,
                                   ),
                           ),
-                          if (canMeasure && canMeasureDrawing) ...[
+                          if (canMeasure) ...[
                             LayoutId(
                               id: _LayerLayoutIds.recordsCanvas,
-                              child: const MeasureRecordsCanvasPanel(),
+                              child: _enableMeasureOffstageWrap(
+                                  const MeasureRecordsCanvasPanel()),
                             ),
                             LayoutId(
                               id: _LayerLayoutIds.activeMeasure,
-                              child: const MeasureActiveCanvasPanel(),
+                              child: _enableMeasureOffstageWrap(
+                                  const MeasureActiveCanvasPanel()),
                             ),
                             LayoutId(
                               id: _LayerLayoutIds.activeAnnotation,
-                              child: const AnnotationCanvas(),
+                              child: _enableMeasureOffstageWrap(
+                                  const AnnotationCanvas()),
                             ),
                             if (application.isThirdPart)
                               LayoutId(
                                 id: _LayerLayoutIds.standardLineCalibration,
-                                child: StandardLineCalibrationCanvas(
-                                    standardLineCalibrationController!),
+                                child: _enableMeasureOffstageWrap(
+                                    StandardLineCalibrationCanvas(
+                                        standardLineCalibrationController!)),
                               ),
                             LayoutId(
                               id: _LayerLayoutIds.gesture,
-                              child: _buildGestureLayer(),
+                              child: _enableMeasureOffstageWrap(
+                                  _buildGestureLayer()),
                             ),
                             LayoutId(
                               id: _LayerLayoutIds.result,
-                              child: const MeasureResultPanel(),
+                              child: _enableMeasureOffstageWrap(
+                                  const MeasureResultPanel()),
                             ),
                           ],
                           if (canMeasure)
@@ -539,6 +545,14 @@ class _MeasureMainViewState extends State<MeasureMainView> {
     );
   }
 
+  /// 仅当 canMeasureDrawing 为 true 时才显示的 Offstage 包装
+  Widget _enableMeasureOffstageWrap(Widget child) {
+    return Offstage(
+      offstage: !canMeasureDrawing,
+      child: child,
+    );
+  }
+
   Widget _buildGestureLayer() {
     if (application.isThirdPart) {
       if (standardLineCalibrationController!.isEditing) {

+ 5 - 0
lib/view/measure/operate_type_change_button.dart

@@ -98,6 +98,8 @@ class OperateTypeChangeButtonState extends State<OperateTypeChangeButton>
       // 用于切换到第一个测量项
       measureMetaController.updateItemList();
     } else {
+      // 用于结束未结束的组合测量项,防止撤销时出现残余
+      measureHandler.onRightClickFinishMeasure.emit(this, true);
       final application = Get.find<IApplication>();
       Future.delayed(const Duration(milliseconds: 500), () {
         application.switchAnnotation(AnnotationType.label, "test");
@@ -130,6 +132,7 @@ class OperateTypeChangeButtonState extends State<OperateTypeChangeButton>
   onTapMeasure() {
     if (operateButtonState == OperateButtonState.isMeasure) {
       measureHandler.toolPanelState = false;
+      measureHandler.canMeasureDrawing = false;
       setState(() {
         operateButtonState = OperateButtonState.allClose;
       });
@@ -142,11 +145,13 @@ class OperateTypeChangeButtonState extends State<OperateTypeChangeButton>
   onTapAnnotation() {
     if (operateButtonState == OperateButtonState.isAnnotation) {
       measureHandler.toolPanelState = false;
+      measureHandler.canMeasureDrawing = false;
       setState(() {
         operateButtonState = OperateButtonState.allClose;
       });
     } else {
       measureHandler.toolPanelState = true;
+      measureHandler.canMeasureDrawing = true;
       changeTypeTo(MeasureOperateType.annotation);
       setState(() {
         operateButtonState = OperateButtonState.isAnnotation;