Jelajahi Sumber

屏蔽多幅vid下的测量入口

gavin.chen 2 tahun lalu
induk
melakukan
f0fc0c7ef5

+ 2 - 2
lib/interfaces/process/workspace/mobile_measure_view_state_controller.dart

@@ -3,9 +3,9 @@ import 'package:fis_common/event/event_type.dart';
 /// 手机端测量页面状态控制器
 abstract class IMobileMeasureViewStateController {
   /// 当前模式
-  MobileMeasureMode get currentMode;
+  MobileMeasureMode get currentMeasureMode;
 
-  set currentMode(MobileMeasureMode value);
+  set currentMeasureMode(MobileMeasureMode value);
 
   /// 模式切换事件
   late final FEventHandler<MobileMeasureMode> onModeChanged;

+ 4 - 4
lib/view/mobile_view/controller/mobile_measure_view_state_controller.dart

@@ -3,14 +3,14 @@ import 'package:fis_measure/interfaces/process/workspace/mobile_measure_view_sta
 
 class MobileMeasureViewStateController
     implements IMobileMeasureViewStateController {
-  MobileMeasureMode _currentMode = MobileMeasureMode.playerMode;
+  MobileMeasureMode _currentMeasureMode = MobileMeasureMode.playerMode;
 
   @override
-  MobileMeasureMode get currentMode => _currentMode;
+  MobileMeasureMode get currentMeasureMode => _currentMeasureMode;
 
   @override
-  set currentMode(MobileMeasureMode value) {
-    _currentMode = value;
+  set currentMeasureMode(MobileMeasureMode value) {
+    _currentMeasureMode = value;
     onModeChanged.emit(this, value);
   }
 

+ 30 - 4
lib/view/mobile_view/mobile_bottom_menu.dart

@@ -14,6 +14,7 @@ import 'package:fis_measure/view/player/control_board/operate_bar.dart';
 import 'package:fis_measure/view/player/controller.dart';
 import 'package:flutter/material.dart';
 import 'package:get/get.dart';
+import 'package:vid/us/vid_us_image.dart';
 
 class MobileBottomMenu extends StatefulWidget {
   const MobileBottomMenu({
@@ -31,6 +32,8 @@ class _MobileBottomMenuState extends State<MobileBottomMenu> {
       Get.find<MobileMeasureViewStateController>();
   late final playerController = Get.find<IPlayerController>();
 
+  bool isCanMeasure = true;
+
   @override
   void initState() {
     mobileMeasureStateController.onModeChanged.addListener(_onViewModeChanged);
@@ -40,6 +43,7 @@ class _MobileBottomMenuState extends State<MobileBottomMenu> {
         ifShowProgressBar = true;
       });
     }
+    playerController.firstFrameLoaded.addListener(_onFrameLoadedAfterFirst);
     super.initState();
   }
 
@@ -47,9 +51,31 @@ class _MobileBottomMenuState extends State<MobileBottomMenu> {
   void dispose() {
     mobileMeasureStateController.onModeChanged
         .removeListener(_onViewModeChanged);
+    playerController.firstFrameLoaded.removeListener(_onFrameLoadedAfterFirst);
+
     super.dispose();
   }
 
+  void _onFrameLoadedAfterFirst(Object sender, VidUsImage? e) {
+    if (!mounted) return;
+    _initModeBtns();
+  }
+
+  void _initModeBtns() {
+    /// 是否允许测量(多幅vid屏蔽测量)
+    if (application.isSingleFrame && application.visuals.length > 1) {
+      isCanMeasure = false;
+      setState(() {
+        ifShowMeasureBtn = false;
+      });
+    } else {
+      isCanMeasure = true;
+      setState(() {
+        ifShowMeasureBtn = true;
+      });
+    }
+  }
+
   bool singleFrame = true;
   bool ifShowProgressBar = false;
   bool ifShowMeasureBtn = true;
@@ -61,7 +87,7 @@ class _MobileBottomMenuState extends State<MobileBottomMenu> {
       case MobileMeasureMode.playerMode:
         setState(() {
           ifShowProgressBar = !singleFrame;
-          ifShowMeasureBtn = true;
+          ifShowMeasureBtn = isCanMeasure;
           ifShowAnnotationBtn = true;
         });
         break;
@@ -75,7 +101,7 @@ class _MobileBottomMenuState extends State<MobileBottomMenu> {
       case MobileMeasureMode.annotationMode:
         setState(() {
           ifShowProgressBar = false;
-          ifShowMeasureBtn = true;
+          ifShowMeasureBtn = isCanMeasure;
           ifShowAnnotationBtn = false;
         });
         break;
@@ -126,7 +152,7 @@ class _MobileBottomMenuState extends State<MobileBottomMenu> {
                   ? SingleIconButton(
                       icon: Icons.straighten,
                       onPressed: () {
-                        mobileMeasureStateController.currentMode =
+                        mobileMeasureStateController.currentMeasureMode =
                             MobileMeasureMode.measureMode;
                       },
                     )
@@ -138,7 +164,7 @@ class _MobileBottomMenuState extends State<MobileBottomMenu> {
                         measureHandler.changedAnnotationType =
                             AnnotationType.label;
                         application.switchAnnotation(AnnotationType.label);
-                        mobileMeasureStateController.currentMode =
+                        mobileMeasureStateController.currentMeasureMode =
                             MobileMeasureMode.annotationMode;
                       },
                     )

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

@@ -154,7 +154,8 @@ class _MobileTopMenuState extends State<MobileTopMenu> {
     return SingleIconButton(
       icon: Icons.exit_to_app,
       onPressed: () {
-        mobileMeasureStateController.currentMode = MobileMeasureMode.playerMode;
+        mobileMeasureStateController.currentMeasureMode =
+            MobileMeasureMode.playerMode;
       },
     );
   }