123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154 |
- import 'package:fis_i18n/i18n.dart';
- 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/utils/prompt_box.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:get/get.dart';
- import 'package:vid/us/vid_us_image.dart';
- import 'measure_data_controller.dart';
- typedef MeasureImagesFetchFunc = Future<List<ExamImageInfo>> Function(
- String code);
- class MeasureController implements IMeasureController {
- late final ExamInfo _examInfo;
- VidDataHost? _vidDataHost;
- IPlayerController? _playerController;
- IApplication? _application;
- int _recursive = 0;
- late final MeasureImagesFetchFunc _imagesFetchFunc;
- final measureData = Get.find<MeasureDataController>();
- 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
- // TODO: implement styleConfiguration
- 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);
- // // 加载第一张图像
- // examInfo.selectedImageIndex = 0;
- }
- @override
- void dispose() {
- examInfo.selectedImageChanged.removeListener(_onExamImageSelectedChanged);
- _playerController?.dispose();
- Get.delete<IApplication>();
- Get.delete<IPlayerController>();
- _vidDataHost?.release();
- }
- /// 轮询下载接口
- void _recursivePlayer(Object sender) {
- playerController.load().then((_) async {
- if (playerController.status != VidPlayStatus.ready) {
- if (_recursive <= 2) {
- _recursive += 1;
- _recursivePlayer(sender);
- } else {
- PromptBox.toast(i18nBook.common.networkUnstable.t);
- _recursive = 0;
- _recursivePlayer(sender);
- // throw FlutterError("Vid file load fail.");
- }
- } else {
- playerController.eventHandler.addListener(_onPlayerEnvent);
- // 构建应用
- await _buildApplication();
- // 通知图像加载完成
- imageLoaded.emit(sender, examInfo.selectedImage);
- }
- });
- }
- 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);
- _recursivePlayer(sender);
- }
- void _onFrameLoaded(Object sender, VidUsImage frame) {
- workingApplication.loadFrame(frame);
- if (workingApplication.canMeasure) {
- if (workingApplication.frameData!.index != 0) {
- // 非首帧,切换第一个测量项
- final items = measureData.getItemMetaList;
- if (items.isNotEmpty) {
- workingApplication.switchItem(items.first);
- }
- }
- }
- }
- void _onPlayerEnvent(Object sender, VidPlayerEvent e) {
- if (e is VidPlayerStatusChangeEvent) {
- workingApplication.canMeasure = 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);
- print("Add New" + _application.hashCode.toString());
- }
- }
|