123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130 |
- import 'package:fis_measure/interfaces/process/workspace/exam_info.dart';
- import 'package:fis_measure/interfaces/process/workspace/measure_controller.dart';
- import 'package:fis_measure/process/workspace/application.dart';
- import 'package:fis_measure/process/workspace/third_part/application.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_vid/data_host/data_host.dart';
- 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/foundation.dart';
- import 'package:get/get.dart';
- import 'package:vid/us/vid_us_image.dart';
- import 'package:fis_vid_ext/vid_extended_data.dart';
- typedef MeasureImagesFetchFunc = Future<List<ExamImageInfo>> Function(
- String code);
- class MeasureController implements IMeasureController {
- late final ExamInfo _examInfo;
- VidDataHost? _vidDataHost;
- IPlayerController? _playerController;
- IApplication? _application;
- late final MeasureImagesFetchFunc _imagesFetchFunc;
- MeasureController(String code,
- {required MeasureImagesFetchFunc imagesFetchFunc}) {
- _examInfo = ExamInfo(code);
- _imagesFetchFunc = imagesFetchFunc;
- }
- @override
- ExamInfo get examInfo => _examInfo;
- @override
- String get currentVidUrl => examInfo.selectedImage.url;
- @override
- VidDataHost get dataHost => _vidDataHost!;
- @override
- bool get canDoMeasure => playerController.status == VidPlayStatus.pause;
- @override
- IPlayerController get playerController => _playerController!;
- @override
-
- IStyeConfiguration get styleConfiguration => throw UnimplementedError();
- @override
- IApplication get workingApplication => _application!;
- @override
- var imageLoaded = FEventHandler<ExamImageInfo?>();
- @override
- Future<void> load() async {
- final images = await _imagesFetchFunc.call(examInfo.code);
- examInfo.images.addAll(images);
- examInfo.selectedImageChanged.addListener(_onExamImageSelectedChanged);
-
-
- }
- @override
- void dispose() {
- examInfo.selectedImageChanged.removeListener(_onExamImageSelectedChanged);
- _playerController?.dispose();
- Get.delete<IApplication>();
- Get.delete<IPlayerController>();
- _vidDataHost?.release();
- }
- void _onExamImageSelectedChanged(Object sender, int index) {
- final url = currentVidUrl;
- _playerController?.dispose();
- _vidDataHost?.frameLoaded.dispose();
- Get.delete<IPlayerController>();
- Get.delete<IApplication>();
- _vidDataHost = VidDataHost(url);
- _playerController =
- Get.put<IPlayerController>(VidPlayerController(dataHost: dataHost));
- dataHost.frameLoaded.addListener(_onFrameLoaded);
- playerController.load().then((_) async {
- if (playerController.status != VidPlayStatus.ready) {
- throw FlutterError("Vid file load fail.");
- }
- playerController.eventHandler.addListener(_onPlayerEnvent);
-
- await _buildApplication();
-
- Future.delayed(const Duration(milliseconds: 100), () {
- playerController.play();
- });
-
- imageLoaded.emit(sender, examInfo.selectedImage);
- });
- }
- void _onFrameLoaded(Object sender, VidUsImage frame) {
- workingApplication.loadFrame(frame);
- }
- void _onPlayerEnvent(Object sender, VidPlayerEvent e) {
- if (e is VidPlayerStatusChangeEvent) {
- workingApplication.canOperate = e.status == VidPlayStatus.pause;
- }
- }
- Future<void> _buildApplication() async {
- final is3rd = dataHost.probe.name == Application.C_VID_THIRDPART_NAME;
- IApplication app;
- if (is3rd) {
- final vidData = await dataHost.getData();
- app = ThirdPartApplication(dataHost.probe, vidData!.extendedData);
- } else {
- app = Application(dataHost.probe);
- }
- _application = Get.put<IApplication>(app);
- }
- }
|