瀏覽代碼

手机端切换图像实现暂存

loki.wu 1 年之前
父節點
當前提交
0c8818240c

+ 7 - 0
lib/measure_page_test.dart

@@ -83,6 +83,12 @@ class MeasureDataTester {
     return null;
   }
 
+  ///参数1:remedicalCode,参数2:token,参数3:patientCode,参数4:图像位置
+  static Future<RemedicalInfoDTO?> getImageInfoByIndex(
+      String remedicalCode, String token, String patientCode, int index) async {
+    return null;
+  }
+
   static Future<bool?> resetUserCommentsAsync(
       String applicationName, String categoryName) async {
     return null;
@@ -139,6 +145,7 @@ class _MeasureTestPageState extends State<MeasureTestPage> {
     MeasureDataTester.saveUserDefinedCommentsAsync,
     MeasureDataTester.resetUserCommentsAsync,
     MeasureDataTester.getPresetCommentsAsync,
+    MeasureDataTester.getImageInfoByIndex,
   ));
   final measureHandler = Get.put(MeasureHandler());
   final controller = Get.put<IMeasureController>(MeasureController(

+ 14 - 0
lib/process/workspace/measure_data_controller.dart

@@ -127,6 +127,10 @@ abstract class IMeasureDataController {
   /// 标记点画笔
   Paint get paintPointPan;
   set paintPointPan(Paint value);
+
+  int index = 0;
+
+  int totalCount = 0;
 }
 
 class MeasureDataController implements IMeasureDataController {
@@ -152,6 +156,11 @@ class MeasureDataController implements IMeasureDataController {
   List<CommentItemDTO> _measureCommentItemResult = [];
   List<ItemMetaGroup> _itemMetaListGroup = [];
 
+  ///index和totalCount是用于手机端切换图像展示的
+  int index = 0;
+
+  int totalCount = 0;
+
   /// 新增的
   List<ItemMetaDTO> _itemMetaListConfig = [];
   Paint _paintLinePan = Paint()
@@ -458,6 +467,7 @@ class MeasureDataController implements IMeasureDataController {
     this.saveUserDefinedCommentsAsync,
     this.resetUserCommentsAsync,
     this.getPresetCommentsAsync,
+    this.getImageInfoByIndex,
   ) {
     _init();
   }
@@ -470,6 +480,10 @@ class MeasureDataController implements IMeasureDataController {
   ///参数1:remedicalCode,参数2:token
   Future<RemedicalInfoDTO?> Function(String, String, String?) getImageInfo;
 
+  ///参数1:remedicalCode,参数2:token,参数3:patientCode,参数4:图像位置
+  Future<RemedicalInfoDTO?> Function(String, String, String, int)
+      getImageInfoByIndex;
+
   ///参数1:测量模式参数
   Future<MeasureApplicationDTO?> Function(MeasureModeSelection)
       getMeasureApplication;

+ 8 - 0
lib/process/workspace/measure_handler.dart

@@ -87,6 +87,9 @@ abstract class IMeasureHandler {
   /// 更新图片列表
   late FEventHandler<List<RemedicalInfoDTO>> changeImageList;
 
+  late FEventHandler<RemedicalInfoDTO> changeImageByIndex =
+      FEventHandler<RemedicalInfoDTO>();
+
   late FEventHandler<bool> onChangeFullScreenState;
 
   late FEventHandler<bool> onToolPanelStateChanged;
@@ -174,6 +177,11 @@ class MeasureHandler implements IMeasureHandler {
 
   @override
   FEventHandler<String> changeImageByRemedicalCode = FEventHandler<String>();
+
+  @override
+  FEventHandler<RemedicalInfoDTO> changeImageByIndex =
+      FEventHandler<RemedicalInfoDTO>();
+
   @override
   FEventHandler<List<RemedicalInfoDTO>> changeImageList =
       FEventHandler<List<RemedicalInfoDTO>>();

+ 0 - 2
lib/view/ai_result_modifier/widgets/ai_feature_analysis.dart

@@ -12,7 +12,6 @@ import 'package:flutter/material.dart';
 import 'package:get/get.dart';
 import 'package:fis_theme/theme.dart';
 
-
 /// ai特征分析
 class AiFeatureAnalysis extends FisView<AiResultModifierController> {
   List<AIDiagnosisDescription>? descriptions;
@@ -130,7 +129,6 @@ class AiFeatureAnalysis extends FisView<AiResultModifierController> {
       source: source,
       hintText: i18nBook.common.Select.t,
       fontFamily: FTheme.ins.localeSetting.fontFamily,
-
       optionValueExtractor: (FSelectOptionModel<String> data) => data.value,
       optionLabelExtractor: (data) => data.title,
       value: _selectValidator(

+ 11 - 0
lib/view/mobile_view/mobile_measure_main_view.dart

@@ -43,6 +43,8 @@ import 'package:fis_measure/view/canvas/records_canvas.dart';
 import 'package:fis_measure/view/player/controller.dart';
 import 'package:fis_measure/view/player/player.dart';
 
+import 'widgets/page_turning.dart';
+
 class MobileMeasureMainView extends StatefulWidget implements FWidget {
   const MobileMeasureMainView(
       {this.isCanWriteReport = false, this.onEditReport, Key? key})
@@ -460,6 +462,10 @@ class _MobileMeasureMainViewState extends State<MobileMeasureMainView> {
                       ),
                     )
                   ],
+                  LayoutId(
+                    id: _LayerLayoutIds.pageTurning,
+                    child: const TurnPage(),
+                  ),
                 ],
               ),
             ),
@@ -532,6 +538,8 @@ class _LayerLayoutDelegate extends MultiChildLayoutDelegate {
     );
     layoutLayer(_LayerLayoutIds.pause, offset, renderSize);
     layoutLayer(_LayerLayoutIds.paintAI, offset, renderSize);
+    layoutLayer(_LayerLayoutIds.pageTurning,
+        Offset(10, renderSize.height / 2 - 100), renderSize);
   }
 
   void layoutLayer(_LayerLayoutIds layoutId, Offset offset, Size size) {
@@ -612,4 +620,7 @@ enum _LayerLayoutIds {
 
   /// 当前测量区域指示器
   currActiveAreaIndicator,
+
+  ///翻页UI
+  pageTurning,
 }

+ 14 - 2
lib/view/mobile_view/mobile_measure_view.dart

@@ -42,6 +42,8 @@ class _MobileMeasureMainPageState extends State<MobileMeasureMainPage> {
   /// 数据
   final measureData = Get.find<MeasureDataController>();
 
+  String _remedicalCode = '';
+
   late final application = Get.find<IApplication>();
 
   // final mouseState = Get.put<IMouseState>(MouseState());
@@ -103,6 +105,7 @@ class _MobileMeasureMainPageState extends State<MobileMeasureMainPage> {
 
   @override
   void initState() {
+    _remedicalCode = widget.remedicalCode;
     _initTouchModuel();
     SystemChrome.setEnabledSystemUIMode(SystemUiMode.immersive);
     SystemChrome.setSystemUIChangeCallback((systemOverlaysAreVisible) async {
@@ -110,6 +113,7 @@ class _MobileMeasureMainPageState extends State<MobileMeasureMainPage> {
       SystemChrome.setEnabledSystemUIMode(SystemUiMode.immersive);
     });
     measureHandler.onChangeImageLoaded.addListener(changeImage);
+    measureHandler.changeImageByIndex.addListener(changeImageByIndex);
     loadLayoutConfig();
     getImageInfo();
     initDefaultMeasureSystemSetting();
@@ -137,7 +141,7 @@ class _MobileMeasureMainPageState extends State<MobileMeasureMainPage> {
     measureData.measureImageData = MeasureImageData(
       patientCode: widget.patientCode,
       recordCode: widget.recordCode,
-      remedicalCode: widget.remedicalCode,
+      remedicalCode: _remedicalCode,
     );
   }
 
@@ -203,6 +207,7 @@ class _MobileMeasureMainPageState extends State<MobileMeasureMainPage> {
       // do nothing
     });
     measureHandler.onChangeImageLoaded.removeListener(changeImage);
+    measureHandler.changeImageByIndex.removeListener(changeImageByIndex);
     super.dispose();
   }
 
@@ -272,7 +277,7 @@ class _MobileMeasureMainPageState extends State<MobileMeasureMainPage> {
 
     measureData.remedicalList = remedicals;
     var remedicalInfo = await measureData.getImageInfo.call(
-      widget.remedicalCode,
+      _remedicalCode,
       widget.token,
       widget.remedicalAISelectedInfoCode,
     );
@@ -290,4 +295,11 @@ class _MobileMeasureMainPageState extends State<MobileMeasureMainPage> {
     measureController.imageLoaded.removeListener(onImageLoaded);
     measureController.imageLoaded.addListener(onImageLoaded);
   }
+
+  void changeImageByIndex(Object sender, RemedicalInfoDTO e) {
+    _remedicalCode = e.remedicalCode!;
+    loadLayoutConfig();
+    getImageInfo();
+    setState(() {});
+  }
 }

+ 85 - 0
lib/view/mobile_view/widgets/page_turning.dart

@@ -0,0 +1,85 @@
+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/rpc_helper.dart';
+import 'package:fis_ui/index.dart';
+import 'package:flutter/material.dart';
+import 'package:get/get.dart';
+
+class TurnPage extends StatefulWidget {
+  const TurnPage({super.key});
+
+  @override
+  State<StatefulWidget> createState() {
+    return TurnPageState();
+  }
+}
+
+class TurnPageState extends State<TurnPage> {
+  final measureData = Get.find<MeasureDataController>();
+  final rpcHelper = Get.find<RPCHelper>();
+  final measureHandler = Get.find<MeasureHandler>();
+  @override
+  Widget build(BuildContext context) {
+    return Column(
+      children: [
+        if (measureData.index > 0) ...[
+          ElevatedButton(
+            onPressed: () async {
+              measureData.index--;
+              var preImageInfo = await measureData.getImageInfoByIndex(
+                measureData.measureImageData.recordCode ?? '',
+                rpcHelper.userToken,
+                measureData.measureImageData.patientCode ?? '',
+                measureData.index,
+              );
+              if (preImageInfo != null) {
+                measureHandler.changeImageByIndex.emit(this, preImageInfo);
+              }
+            },
+            style: ElevatedButton.styleFrom(
+              shape: const CircleBorder(),
+              padding: const EdgeInsets.all(16),
+              elevation: 0,
+              backgroundColor: Colors.white.withOpacity(0.2),
+            ),
+            child: const Icon(
+              Icons.keyboard_arrow_up,
+              size: 40,
+              color: Colors.white,
+            ),
+          ),
+        ],
+        if (measureData.index < measureData.totalCount - 1) ...[
+          const FSizedBox(
+            height: 20,
+          ),
+          ElevatedButton(
+            style: ElevatedButton.styleFrom(
+              shape: const CircleBorder(),
+              padding: const EdgeInsets.all(16),
+              elevation: 0,
+              backgroundColor: Colors.white.withOpacity(0.2),
+            ),
+            onPressed: () async {
+              measureData.index++;
+              var nextImageInfo = await measureData.getImageInfoByIndex(
+                measureData.measureImageData.recordCode ?? '',
+                rpcHelper.userToken,
+                measureData.measureImageData.patientCode ?? '',
+                measureData.index,
+              );
+              if (nextImageInfo != null) {
+                measureHandler.changeImageByIndex.emit(this, nextImageInfo);
+              }
+            },
+            child: const Icon(
+              Icons.keyboard_arrow_down,
+              size: 40,
+              color: Colors.white,
+            ),
+          )
+        ],
+      ],
+    );
+  }
+}