Browse Source

fix play state sync measure bug - review by gavin

melon.yin 2 years ago
parent
commit
0b39e47488

+ 0 - 31
lib/process/workspace/measure_controller.dart

@@ -8,7 +8,6 @@ import 'package:fis_measure/process/workspace/application.dart';
 import 'package:fis_measure/process/workspace/measure_3d_view_controller.dart';
 import 'package:fis_measure/process/workspace/third_part/application.dart';
 import 'package:fis_measure/utils/prompt_box.dart';
-import 'package:fis_measure/view/measure/operate_type_change_button.dart';
 import 'package:fis_measure/view/player/controller.dart';
 import 'package:fis_measure/view/player/enums.dart';
 import 'package:fis_measure/view/player/events.dart';
@@ -17,7 +16,6 @@ import 'package:fis_measure/interfaces/process/workspace/application.dart';
 import 'package:fis_measure/interfaces/process/player/play_controller.dart';
 import 'package:fis_measure/interfaces/process/config/style_config.dart';
 import 'package:fis_common/event/event_type.dart';
-import 'package:flutter/widgets.dart';
 import 'package:get/get.dart';
 import 'package:vid/us/vid_us_image.dart';
 
@@ -32,7 +30,6 @@ class MeasureController implements IMeasureController {
   IPlayerController? _playerController;
   IApplication? _application;
   int _recursive = 0;
-  Timer? _tipsBtnGroupTimer;
 
   late final MeasureImagesFetchFunc _imagesFetchFunc;
   final measureData = Get.find<MeasureDataController>();
@@ -78,7 +75,6 @@ class MeasureController implements IMeasureController {
   @override
   void dispose() {
     examInfo.selectedImageChanged.removeListener(_onExamImageSelectedChanged);
-    _tipsBtnGroupTimer?.cancel();
     _playerController?.dispose();
     Get.delete<IApplication>();
     Get.delete<IPlayerController>();
@@ -174,33 +170,6 @@ class MeasureController implements IMeasureController {
   void _onPlayerEnvent(Object sender, VidPlayerEvent e) {
     if (e is VidPlayerStatusChangeEvent) {
       _application?.canMeasure = e.status == VidPlayStatus.pause;
-      _handleAutoEnterMeasure(e.status);
-    }
-  }
-
-  void _handleAutoEnterMeasure(VidPlayStatus status) {
-    if (status == VidPlayStatus.play || status == VidPlayStatus.pause) {
-      OperateTypeChangeButtonState? getState() {
-        final key = GlobalObjectKey(playerController.url);
-        final state = key.currentState as OperateTypeChangeButtonState?;
-        return state;
-      }
-
-      _tipsBtnGroupTimer?.cancel();
-      _tipsBtnGroupTimer = Timer.periodic(
-        const Duration(milliseconds: 100),
-        (timer) {
-          final state = getState();
-          if (state != null) {
-            timer.cancel();
-            if (status == VidPlayStatus.play) {
-              state.handleAutoExitMeasure();
-            } else {
-              state.handleAutoTapInMeasure();
-            }
-          }
-        },
-      );
     }
   }
 

+ 3 - 4
lib/process/workspace/third_part/application.dart

@@ -2,15 +2,11 @@ import 'dart:typed_data';
 
 import 'package:fis_measure/interfaces/date_types/rect_region.dart';
 import 'package:fis_measure/interfaces/date_types/size.dart';
-import 'package:fis_measure/interfaces/process/standard_line/calibration.dart';
 import 'package:fis_measure/interfaces/process/standard_line/pixel_space.dart';
-import 'package:fis_measure/interfaces/process/standard_line/standard_line.dart';
 import 'package:fis_measure/interfaces/process/visuals/visual.dart';
-import 'package:vid/us/vid_us_image.dart';
 import 'package:vid/us/vid_us_probe.dart';
 
 import '../application.dart';
-import 'calibration_controller.dart';
 import 'standard_line.dart';
 import 'visual.dart';
 
@@ -27,6 +23,9 @@ class ThirdPartApplication extends Application {
   /// 参考线
   final standardLine = StandardLine();
 
+  /// 是否请求过 将空的校准线填充
+  bool hasFillEmtpyStandardLineRequested = false;
+
   @override
   bool get isThirdPart => true;
 

+ 36 - 12
lib/view/measure/operate_type_change_button.dart

@@ -10,9 +10,12 @@ import 'package:fis_measure/interfaces/process/workspace/exam_info.dart';
 import 'package:fis_measure/process/workspace/measure_controller.dart';
 import 'package:fis_measure/process/workspace/measure_data_controller.dart';
 import 'package:fis_measure/process/workspace/measure_handler.dart';
+import 'package:fis_measure/process/workspace/third_part/application.dart';
 import 'package:fis_measure/view/measure/measure_view_controller.dart';
 import 'package:fis_measure/view/menu_button_group/menu_button_group.dart';
 import 'package:fis_measure/view/player/controller.dart';
+import 'package:fis_measure/view/player/enums.dart';
+import 'package:fis_measure/view/player/events.dart';
 import 'package:fis_ui/base_define/page.dart';
 import 'package:fis_ui/index.dart';
 import 'package:flutter/material.dart';
@@ -42,20 +45,27 @@ class OperateTypeChangeButtonState extends State<OperateTypeChangeButton>
   // late TabController tabController;
   late final measureData = Get.find<MeasureDataController>();
   bool isShowMeasureButton = true;
-  bool is3rdVideoTappedMeasure = false; // 三方视频是否进入(or请求)过测量
   bool isWaitingDrawStandardLine = false;
-  OperateButtonState operateButtonState = OperateButtonState.isMeasure;
+  OperateButtonState operateButtonState = OperateButtonState.allClose;
 
   /// 全部图片list
   final measureController = Get.find<MeasureController>();
   VidPlayerController playerController =
       Get.find<IPlayerController>() as VidPlayerController;
 
+  bool get isCurrMeasure => operateButtonState == OperateButtonState.isMeasure;
+  bool get isCurrAnnotation =>
+      operateButtonState == OperateButtonState.isAnnotation;
+
   @override
   void initState() {
     super.initState();
     measureHandler.annotationsLoaded.addListener(onAnnotationsLoaded);
     measureController.imageLoaded.addListener(_onImageLoaded);
+    playerController.eventHandler.addListener(_onHandlePlayerEnvent);
+    WidgetsBinding.instance.addPostFrameCallback((timeStamp) {
+      handleAutoTapInMeasure();
+    });
   }
 
   @override
@@ -63,6 +73,7 @@ class OperateTypeChangeButtonState extends State<OperateTypeChangeButton>
     super.dispose();
     measureHandler.annotationsLoaded.removeListener(onAnnotationsLoaded);
     measureController.imageLoaded.removeListener(_onImageLoaded);
+    playerController.eventHandler.removeListener(_onHandlePlayerEnvent);
     // tabController.dispose();
   }
 
@@ -112,7 +123,7 @@ class OperateTypeChangeButtonState extends State<OperateTypeChangeButton>
       measureHandler.onRightClickFinishMeasure.emit(this, true);
       final application = Get.find<IApplication>();
       Future.delayed(const Duration(milliseconds: 500), () {
-        application.switchAnnotation(AnnotationType.label, "test");
+        application.switchAnnotation(AnnotationType.label, "empty");
       });
     }
   }
@@ -143,10 +154,13 @@ class OperateTypeChangeButtonState extends State<OperateTypeChangeButton>
     final application = Get.find<IApplication>();
     bool canEnterMeasure = true;
     if (application.checkIs3rdAndEmptyStandardLine() &&
-        application.isSingleFrame == false &&
-        is3rdVideoTappedMeasure == true) {
-      // 校准信息为空,但不是首次进入,不再自动进入测量
-      canEnterMeasure = false;
+        application.isSingleFrame == false) {
+      // 校准信息为空
+      final thirdPartApp = (application as ThirdPartApplication);
+      if (thirdPartApp.hasFillEmtpyStandardLineRequested) {
+        // 不是首次请求,不再自动进入测量
+        canEnterMeasure = false;
+      }
     }
     if (canEnterMeasure) {
       enterMeasure();
@@ -157,6 +171,8 @@ class OperateTypeChangeButtonState extends State<OperateTypeChangeButton>
   void handleAutoExitMeasure() {
     if (Get.find<IApplication>().checkIs3rdAndEmptyStandardLine()) {
       closeAll();
+    } else {
+      enterMeasure();
     }
   }
 
@@ -193,14 +209,18 @@ class OperateTypeChangeButtonState extends State<OperateTypeChangeButton>
 
   /// 进入测量
   void enterMeasure() {
-    if (Get.find<IApplication>().checkIs3rdAndEmptyStandardLine()) {
-      is3rdVideoTappedMeasure = true;
+    final application = Get.find<IApplication>();
+    if (application.checkIs3rdAndEmptyStandardLine()) {
       VoidCallback rollbackFn;
       if (operateButtonState == OperateButtonState.isAnnotation) {
         rollbackFn = onTapAnnotation;
       } else {
         rollbackFn = closeAll;
       }
+
+      final thirdPartApp = (application as ThirdPartApplication);
+      thirdPartApp.hasFillEmtpyStandardLineRequested = true;
+
       _tryEnterMeasure(rollbackFn);
     } else {
       _tryEnterMeasure(() {});
@@ -320,9 +340,13 @@ class OperateTypeChangeButtonState extends State<OperateTypeChangeButton>
     }
   }
 
-  bool get isCurrMeasure => operateButtonState == OperateButtonState.isMeasure;
-  bool get isCurrAnnotation =>
-      operateButtonState == OperateButtonState.isAnnotation;
+  void _onHandlePlayerEnvent(Object sender, VidPlayerEvent e) {
+    if (e is VidPlayerStatusChangeEvent) {
+      if (e.status == VidPlayStatus.play) {
+        handleAutoExitMeasure();
+      }
+    }
+  }
 
   @override
   FWidget build(BuildContext context) {

+ 1 - 4
lib/view/menu_button_group/menu_button_group.dart

@@ -122,10 +122,7 @@ class _FMenuButtonGroupState extends FState<FMenuButtonGroup> {
         i18nBook.measure.clear.t,
         () => application.clearRecords(),
       ),
-      OperateTypeChangeButton(
-        key: GlobalObjectKey(playerController.url),
-        businessParent: widget.businessParent,
-      ),
+      OperateTypeChangeButton(businessParent: widget.businessParent),
       _buildTitleButton(
         measureHandler.fullScreenState
             ? FIcons.fis_full_screen_reduction