Эх сурвалжийг харах

support onLoopPlaybackEnableChanged

Melon 2 жил өмнө
parent
commit
62aec85f50

+ 10 - 1
lib/process/workspace/measure_controller.dart

@@ -17,6 +17,7 @@ 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:fis_ui/index.dart';
 import 'package:get/get.dart';
 import 'package:vid/us/vid_us_image.dart';
 
@@ -33,6 +34,7 @@ class MeasureController implements IMeasureController {
   int _recursive = 0;
 
   final bool enableLoopPlayback;
+  final ValueCallback<bool>? onLoopPlaybackEnableChanged;
 
   late final MeasureImagesFetchFunc _imagesFetchFunc;
   final measureData = Get.find<MeasureDataController>();
@@ -42,6 +44,7 @@ class MeasureController implements IMeasureController {
     String code, {
     required MeasureImagesFetchFunc imagesFetchFunc,
     this.enableLoopPlayback = false,
+    this.onLoopPlaybackEnableChanged,
   }) {
     _examInfo = ExamInfo(code);
     _imagesFetchFunc = imagesFetchFunc;
@@ -115,7 +118,9 @@ class MeasureController implements IMeasureController {
     Get.delete<IPlayerController>();
     _windowSetState(index);
     _playerController = Get.put<IPlayerController>(
-      VidPlayerController(url)..enableLoop = enableLoopPlayback,
+      VidPlayerController(url)
+        ..enableLoop = enableLoopPlayback
+        ..enableLoopChanged.addListener(_onEnableLoopPlaybackChanged),
     );
     playerController.firstFrameLoaded.addListener(_onFirstFrameLoaded);
     playerController.frameUpdated.addListener(_onFrameUpdated);
@@ -123,6 +128,10 @@ class MeasureController implements IMeasureController {
     _tryLoadPlayer();
   }
 
+  void _onEnableLoopPlaybackChanged(Object _, bool e) {
+    onLoopPlaybackEnableChanged?.call(e);
+  }
+
   void _tryLoadPlayer() async {
     int tryCount = 0;
     const limitCount = 5;

+ 4 - 0
lib/view/measure/measure_view.dart

@@ -31,6 +31,7 @@ class MeasureMainPage extends StatefulWidget
     this.remedicalCode, {
     this.needRouterBack,
     this.enableLoopPlayback = false,
+    this.onLoopPlaybackEnableChanged,
     Key? key,
   }) : super(key: key);
 
@@ -40,6 +41,8 @@ class MeasureMainPage extends StatefulWidget
   final String recordCode;
   final bool? needRouterBack; // 需要返回按钮【一版用于返回到报告编辑】
   final bool enableLoopPlayback;
+  final ValueCallback<bool>? onLoopPlaybackEnableChanged;
+
   @override
   final String pageName = 'MeasureMainPage';
   @override
@@ -350,6 +353,7 @@ class _MeasureMainPageState extends State<MeasureMainPage> {
         return examImageInfoList;
       },
       enableLoopPlayback: widget.enableLoopPlayback,
+      onLoopPlaybackEnableChanged: widget.onLoopPlaybackEnableChanged,
     ));
 
     await measureController.load();

+ 10 - 1
lib/view/player/controller.dart

@@ -54,6 +54,8 @@ class VidPlayerController extends ChangeNotifier implements IPlayerController {
   @override
   late final FEventHandler<String?> errorOccured;
 
+  final enableLoopChanged = FEventHandler<bool>();
+
   late final String _url;
   late final VidDataChannel _dataChannel;
   late final VidBufferWaiter _bufferWaiter;
@@ -65,9 +67,16 @@ class VidPlayerController extends ChangeNotifier implements IPlayerController {
   bool _disposed = false;
   bool _isFirstFrame = false;
   bool _loading = false;
+  bool _enableLoop = false;
 
   ///  是否开启循环播放
-  bool enableLoop = false;
+  bool get enableLoop => _enableLoop;
+  set enableLoop(bool val) {
+    if (val != _enableLoop) {
+      _enableLoop = val;
+      enableLoopChanged.emit(this, val);
+    }
+  }
 
   @override
   String get url => _url;