123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307 |
- import 'package:fis_jsonrpc/rpc.dart';
- import 'package:fis_measure/define.dart';
- import 'package:fis_measure/interfaces/process/workspace/application.dart';
- import 'package:fis_measure/interfaces/process/workspace/exam_info.dart';
- import 'package:fis_measure/process/layout/configuration.dart';
- import 'package:fis_measure/process/workspace/measure_controller.dart';
- import 'package:fis_measure/process/workspace/measure_data_controller.dart';
- import 'package:fis_measure/process/workspace/measure_data_helper.dart';
- import 'package:fis_measure/process/workspace/measure_handler.dart';
- import 'package:fis_measure/view/gesture/positioned_touch_cursor.dart';
- import 'package:fis_measure/view/mobile_view/mobile_measure_main_view.dart';
- import 'package:fis_ui/index.dart';
- import 'package:flutter/material.dart';
- import 'package:get/get.dart';
- import 'package:flutter/services.dart';
- import 'widgets/image_pagination.dart';
- /// 测量主页面
- class MobileMeasureMainPage extends StatefulWidget implements FWidget {
- const MobileMeasureMainPage(
- this.token,
- this.recordCode,
- this.patientCode,
- this.remedicalCode,
- this.remedicalAISelectedInfoCode, {
- this.isCanWriteReport = false,
- this.onEditReport,
- Key? key,
- }) : super(key: key);
- final String token;
- final String patientCode;
- final String remedicalCode;
- final String recordCode;
- final String? remedicalAISelectedInfoCode;
- final bool isCanWriteReport;
- final void Function()? onEditReport;
- @override
- State<StatefulWidget> createState() => _MobileMeasureMainPageState();
- }
- class _MobileMeasureMainPageState extends State<MobileMeasureMainPage> {
- /// 数据
- final measureData = Get.find<MeasureDataController>();
- String _remedicalCode = '';
- late final application = Get.find<IApplication>();
- // final mouseState = Get.put<IMouseState>(MouseState());
- /// 页面loadding
- bool loaded = false;
- // /// 图片loadding
- bool isShowLoading = true;
- ///检查图片信息表
- List<ExamImageInfo> examImageInfoList = [];
- late final measureHandler = Get.find<IMeasureHandler>();
- /// 测量控制器
- late MeasureController measureController = Get.put(MeasureController(
- "",
- imagesFetchFunc: (code) async {
- return examImageInfoList;
- },
- ));
- /// 获取测量图片所需的图片组 并且写入控制器中 加载
- void getExamImageInfoList(List<RemedicalInfoDTO> remedicals) async {
- examImageInfoList = remedicals.map((e) {
- final imgInfo = e.terminalImages!;
- final vidUrl = measureData.chooseImageUrl(imgInfo);
- return ExamImageInfo(vidUrl, imgInfo.previewUrl!);
- }).toList();
- measureController = Get.put(MeasureController(
- "",
- imagesFetchFunc: (code) async {
- return examImageInfoList;
- },
- ));
- await measureController.load();
- final selectedImageIndex = examImageInfoList.indexWhere(
- (element) => element.url == measureData.itemCurrentImage,
- );
- if (selectedImageIndex > -1) {
- // 命中当前选择图像 !!! 此时触发图像的加载
- measureController.examInfo.selectedImageIndex = selectedImageIndex;
- }
- }
- void newImageLoading(sender, e) {
- isShowLoading = e;
- setState(() {});
- }
- /// 初始化卡尺样式部分
- Future<void> _initTouchModuel() async {
- Get.put<ITouchPointState>(TouchPointState());
- }
- @override
- void initState() {
- _remedicalCode = widget.remedicalCode;
- _initTouchModuel();
- SystemChrome.setEnabledSystemUIMode(SystemUiMode.immersive);
- SystemChrome.setSystemUIChangeCallback((systemOverlaysAreVisible) async {
- await Future.delayed(const Duration(seconds: 1));
- SystemChrome.setEnabledSystemUIMode(SystemUiMode.immersive);
- });
- measureHandler.onNewImageLoadStatueChanged.addListener(newImageLoading);
- loadLayoutConfig();
- setImageInfo();
- initDefaultMeasureSystemSetting();
- super.initState();
- }
- /// 初始化默认用户设置
- void initDefaultMeasureSystemSetting() {
- final defaultMobileMeasureSystemSetting = MeasureSystemSettingDTO(
- cursorSize: 16,
- shapeCursorSize: 30,
- showResultWindow: true,
- fontSize: 14,
- showCursorLine: true,
- showDepthGuideline: true,
- showBriefAnnotation: true,
- autoSnapDistance: '20',
- minCursorDistance: '20',
- annotationFontSize: 14,
- distanceUnit: Unit.cm,
- areaUnit: Unit.cm2,
- velocityUnit: Unit.cms,
- timeUnit: Unit.msec,
- );
- measureData.measureSystemSetting = defaultMobileMeasureSystemSetting;
- }
- void setImageInfo() {
- measureData.measureInfoData = MeasureInfoData(
- patientCode: widget.patientCode,
- recordCode: widget.recordCode,
- remedicalCode: _remedicalCode,
- );
- }
- /// 加载图像布局配置
- void loadLayoutConfig() async {
- await LayoutConfiguration.ins.loadData();
- setState(() {
- // 加载图像数据
- _initData();
- });
- }
- void onImageLoaded(Object sender, ExamImageInfo? e) async {
- // measureHandler.changeImageLoaded = true;
- if (!mounted) return;
- final currentImage = measureData.remedicalList.firstWhereOrNull(
- (element) =>
- element.terminalImages!.imageUrl == e!.url ||
- element.terminalImages!.originImageUrl == e.url,
- );
- if (currentImage != null) {
- /// 获取图片详细信息
- var remedicalInfo = await MeasureDataHelper.getImageInfo(
- currentImage.remedicalCode ?? '',
- widget.remedicalAISelectedInfoCode,
- );
- if (remedicalInfo != null) {
- measureData.aiResults = remedicalInfo.diagnosisResult ?? '';
- /// ai 良恶性 判断是否有ai
- measureData.diagnosisConclusion = remedicalInfo.diagnosisConclusion;
- if (remedicalInfo.carotidResult != null) {
- } else {}
- try {
- if (e != null) {
- Future.delayed(const Duration(milliseconds: 100), () {
- measureController.playerController.play();
- });
- setState(() {
- loaded = true;
- measureHandler.newImageLoading = false;
- });
- }
- } catch (error) {
- setState(() {
- loaded = true;
- measureHandler.newImageLoading = false;
- });
- }
- }
- }
- }
- @override
- void dispose() {
- SystemChrome.setPreferredOrientations([
- DeviceOrientation.portraitUp,
- ]);
- SystemChrome.setEnabledSystemUIMode(SystemUiMode.manual,
- overlays: SystemUiOverlay.values);
- SystemChrome.setSystemUIChangeCallback((systemOverlaysAreVisible) async {
- // do nothing
- });
- measureHandler.onNewImageLoadStatueChanged.removeListener(newImageLoading);
- super.dispose();
- }
- @override
- FWidget build(BuildContext context) {
- FWidget body;
- if (!loaded) {
- const loadingWidget = FCenter(child: FCircularProgressIndicator());
- body = FRow(
- children: const [
- FExpanded(
- child: loadingWidget,
- ),
- ],
- );
- } else {
- body = QuickFWidget(
- Stack(
- children: [
- Align(
- alignment: Alignment.topLeft,
- child: FRow(
- children: [
- FExpanded(
- child: FColumn(
- mainAxisSize: MainAxisSize.max,
- children: [
- FExpanded(
- child: isShowLoading
- ? const FCenter(
- child: FCircularProgressIndicator(),
- )
- : MobileMeasureMainView(
- isCanWriteReport: widget.isCanWriteReport,
- onEditReport: widget.onEditReport,
- ),
- )
- ],
- ),
- ),
- ],
- ),
- ),
- ImagePagination(measureController: measureController),
- ],
- ),
- );
- }
- return FCenter(
- child: FContainer(
- color: Colors.black,
- child: FSafeArea(bottom: false, child: body),
- ),
- );
- }
- void _initData() async {
- List<RemedicalInfoDTO> remedicals = [];
- loaded = false;
- var value = await MeasureDataHelper.getRemedicalList.call(
- widget.patientCode,
- widget.recordCode,
- );
- for (var remedicalItemList in value) {
- remedicals.addAll(remedicalItemList.remedicalList ?? []);
- }
- /// 获取样式
- // _getMeasureSystemSetting();
- measureData.remedicalList = remedicals;
- var remedicalInfo = await MeasureDataHelper.getImageInfo.call(
- _remedicalCode,
- widget.remedicalAISelectedInfoCode,
- );
- if (remedicalInfo != null) {
- measureData.aiResults = remedicalInfo.diagnosisResult ?? '';
- if (remedicalInfo.terminalImages != null) {
- loaded = true;
- final imgInfo = remedicalInfo.terminalImages!;
- measureData.itemCurrentImage = measureData.chooseImageUrl(imgInfo);
- getExamImageInfoList(remedicals);
- }
- }
- measureController.imageLoaded.removeListener(onImageLoaded);
- measureController.imageLoaded.addListener(onImageLoaded);
- }
- }
|