123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240 |
- import 'package:fis_i18n/i18n.dart';
- import 'package:fis_measure/interfaces/enums/annotation.dart';
- import 'package:fis_measure/interfaces/enums/operate.dart';
- import 'package:fis_measure/interfaces/process/player/play_controller.dart';
- import 'package:fis_measure/interfaces/process/workspace/application.dart';
- import 'package:fis_measure/interfaces/process/workspace/measure_3d_view_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/measure_3d_view_controller.dart';
- import 'package:fis_measure/view/measure/arrow_annotation_button.dart';
- import 'package:fis_measure/view/measure/drag_delete_area.dart';
- import 'package:fis_measure/view/measure/measure_left_annotation.dart';
- import 'package:fis_measure/view/measure/measure_search_input.dart';
- import 'package:fis_measure/view/measure/measure_tool.dart';
- import 'package:fis_measure/view/measure/carotid_measure_tool.dart';
- import 'package:fis_measure/view/measure/measure_tools_title.dart';
- import 'package:fis_measure/view/measure/measure_view_controller.dart';
- import 'package:fis_measure/view/measure/operate_type_change_button.dart';
- import 'package:fis_measure/view/measure/measure_panel_head.dart';
- import 'package:fis_ui/index.dart';
- import 'package:fis_ui/interface/interactive_container.dart';
- import 'package:fis_ui/widgets/layout/offstage.dart';
- import 'package:flutter/material.dart';
- import 'package:get/get.dart';
- /// 测量左侧工具面板
- class MeasureToolPanel extends StatefulWidget implements FInteractiveContainer {
- const MeasureToolPanel({
- Key? key,
- this.customWidgets = const [],
- }) : super(key: key);
- @override
- final String pageName = 'MeasureLeftBoard';
- final List<FWidget> customWidgets;
- @override
- State<MeasureToolPanel> createState() => MeasureToolPanelState();
- }
- class MeasureToolPanelState extends State<MeasureToolPanel> {
- final measureHandler = Get.find<MeasureHandler>();
- final playerController = Get.find<IPlayerController>();
- final measure3DViewController = Get.find<Measure3DViewController>();
- /// 数据
- late final measureData = Get.find<MeasureDataController>();
- /// 测量项控制器
- final measureMetaController = Get.find<MeasureMetaController>();
- /// 是否显示颈动脉2D指定的测量项
- bool showCarotid2DSelectMeasure = false;
- /// 是否为魔盒的Vid
- bool isThirdPart = Get.find<IApplication>().isThirdPart;
- /// 是否显示测量项
- bool hideMeasureItems = false;
- /// 是否正在拖拽
- bool isDragging = false;
- bool isMeasureTool = true;
- double _width = 300;
- bool get isArrowMeasureAnnotationType =>
- measureHandler.changedAnnotationType == AnnotationType.arrow;
- MeasureOperateType currOperateType = MeasureOperateType.measure;
- void _onOperateTypeChanged(
- Object sender,
- MeasureOperateType e,
- ) {
- setState(() {
- currOperateType = e;
- });
- }
- void _onCurItemMetaListChanged(sender, e) {
- if (mounted) {
- setState(() {});
- }
- }
- /// 新图像完成加载
- void _onNewImageLoadStatueChanged(sender, e) {
- final application = Get.find<IApplication>();
- setState(() {
- isThirdPart = application.isThirdPart;
- });
- }
- /// 拖拽状态发生改变
- _onDragStateChanged(Object sender, bool e) {
- setState(() {
- isDragging = e;
- });
- }
- @override
- void initState() {
- measureHandler.onOperateTypeChanged.addListener(_onOperateTypeChanged);
- measure3DViewController.updatePlayerMode.addListener(_onModeChanged);
- measureData.curItemMetaListChanged.addListener(_onCurItemMetaListChanged);
- measureHandler.onNewImageLoadStatueChanged
- .addListener(_onNewImageLoadStatueChanged);
- measureHandler.onDragStateChanged.addListener(_onDragStateChanged);
- super.initState();
- }
- @override
- void dispose() {
- measureHandler.onOperateTypeChanged.removeListener(_onOperateTypeChanged);
- measure3DViewController.updatePlayerMode.removeListener(_onModeChanged);
- measureData.curItemMetaListChanged
- .removeListener(_onCurItemMetaListChanged);
- measureHandler.onNewImageLoadStatueChanged
- .removeListener(_onNewImageLoadStatueChanged);
- measureHandler.onDragStateChanged.removeListener(_onDragStateChanged);
- super.dispose();
- }
- /// 模式改变触发更新
- void _onModeChanged(Object s, MeasureMode mode) {
- switch (mode) {
- case MeasureMode.vidMode:
- final playerController = Get.find<IPlayerController>();
- // 通过帧加载完成事件通知,去更新测量项
- if (playerController.currentFrame != null) {
- playerController.firstFrameLoaded
- .emit(this, playerController.currentFrame!);
- }
- setState(() {
- showCarotid2DSelectMeasure = false;
- hideMeasureItems = false;
- });
- break;
- case MeasureMode.carotid2DMode:
- setState(() {
- showCarotid2DSelectMeasure = true;
- hideMeasureItems = false;
- });
- break;
- case MeasureMode.carotid3DMode:
- setState(() {
- showCarotid2DSelectMeasure = true;
- hideMeasureItems = true;
- });
- break;
- }
- }
- bool get hideMeasureTab => (currOperateType == MeasureOperateType.annotation);
- bool get hideCommentTab => !hideMeasureTab;
- @override
- FWidget build(BuildContext context) {
- final newPlayerController = Get.find<IPlayerController>();
- final mediaQuery = MediaQuery.of(context);
- ///屏幕缩放比例
- final devicePixelRatio = mediaQuery.devicePixelRatio;
- _width = 300 / devicePixelRatio;
- return FColumn(
- mainAxisSize: MainAxisSize.max,
- crossAxisAlignment: CrossAxisAlignment.start,
- children: [
- FOffstage(
- offstage: hideMeasureItems,
- child: LeftSiderHold(
- ifHideConfig: showCarotid2DSelectMeasure || isThirdPart,
- customWidgets: widget.customWidgets,
- ),
- ),
- FOffstage(
- offstage: hideMeasureItems || hideCommentTab,
- child: FContainer(
- width: _width,
- key: UniqueKey(),
- child: const LeftSelectInput(),
- ),
- ),
- FOffstage(
- offstage: hideMeasureItems || hideMeasureTab,
- child: const LeftMeasureTools(),
- ),
- FExpanded(
- child: FStack(
- fit: StackFit.passthrough,
- children: [
- FOffstage(
- offstage: hideMeasureItems || hideMeasureTab,
- child: FContainer(
- width: _width,
- child: showCarotid2DSelectMeasure
- ? const CarotidLeftSiderSelectMeasure()
- : FContainer(
- key: Key(newPlayerController.url),
- child: const LeftSiderSelectMeasure()),
- ),
- ),
- FOffstage(
- offstage: hideMeasureItems || hideCommentTab,
- child: FContainer(
- width: _width,
- key: UniqueKey(),
- child: const MeasureLeftAnnotation(),
- ),
- ),
- ],
- ),
- ),
- FOffstage(
- offstage: hideMeasureItems || hideCommentTab || !isDragging,
- child: const DragDeleteArea(),
- ),
- FOffstage(
- offstage: hideMeasureItems || hideCommentTab || isDragging,
- child: const ArrowAnnotationButton()),
- FOffstage(
- offstage: !hideMeasureItems,
- child: FContainer(
- width: _width,
- child: FCenter(
- child: FElevatedButton(
- name: "backToVidMode",
- businessParent: widget,
- onPressed: () => measure3DViewController.backToVidMode(),
- child: FText(
- i18nBook.measure.videoMode.t,
- style: const TextStyle(color: Colors.white),
- ),
- ),
- ),
- ),
- ),
- ],
- );
- }
- }
|