Jelajahi Sumber

1、测量图像选择逻辑变更,变更成图像code

guanxinyi 1 tahun lalu
induk
melakukan
78128c32c3

+ 3 - 3
lib/interfaces/process/workspace/exam_info.dart

@@ -36,12 +36,12 @@ class ExamImageInfo {
   /// 预览图链接
   final String previewUrl;
 
-  /// ai图像编辑code
-  final String? remedicalAISelectedInfoCode;
+  /// 图像code
+  final String? remedicalCode;
 
   ExamImageInfo(
     this.url,
     this.previewUrl, {
-    this.remedicalAISelectedInfoCode,
+    this.remedicalCode,
   });
 }

+ 10 - 12
lib/view/measure/measure_images_bar.dart

@@ -220,16 +220,18 @@ class _ScrollableImageListState extends State<ScrollableImageList> {
     String imageUrl,
     String remedicalCode,
   ) async {
-    if (measureData.itemCurrentImage == imageUrl) {
-      return;
-    }
-    measureData.itemCurrentImage = imageUrl;
     final selectedIndex = measureController.examInfo.images.indexWhere(
-      (element) => element.url == imageUrl,
+      (element) => element.remedicalCode == remedicalCode,
     );
     if (selectedIndex < 0) {
       return;
     }
+    if (measureData.itemCurrentImage == imageUrl &&
+        measureController.examInfo.selectedImageIndex == selectedIndex) {
+      return;
+    }
+    measureData.itemCurrentImage = imageUrl;
+
     // remedicalAISelectedInfoCode是因为选择ai编辑过的图片code和remedicalCode等级一样
     measureHandler.changeImageLoaded = true;
     measureData.measureImageData = MeasureImageData(
@@ -369,6 +371,7 @@ class _ScrollableImageListState extends State<ScrollableImageList> {
   }
 
   FWidget _buildImageList(List<RemedicalInfoDTO> remedicalItemList) {
+    var currentIndex = measureController.examInfo.selectedImageIndex;
     return FContainer(
       key: widget.globalKey,
       child: FListView.builder(
@@ -391,20 +394,15 @@ class _ScrollableImageListState extends State<ScrollableImageList> {
             locationDescription: _translateLocationDescription(item),
           );
 
-          String originalImageUrl = item.terminalImages!.originImageUrl ?? "";
-          String cdnImageUrl = item.terminalImages!.imageUrl ?? "";
-          bool isNotCurrentImage =
-              originalImageUrl != measureData.itemCurrentImage &&
-                  cdnImageUrl != measureData.itemCurrentImage;
+          bool isCurrentSelect = index == currentIndex;
           return FContainer(
             key: ValueKey(measureData.itemCurrentImage),
             width: 160,
             alignment: Alignment.center,
             decoration: BoxDecoration(
               border: Border.all(
-                //当前图片地址(可能是CDN地址,可能是源站地址)和源站地址不相同,且和cdn地址不相同时,点击图片外边框为灰色,否则为蓝色
                 width: 3,
-                color: isNotCurrentImage ? Colors.grey : Colors.blue,
+                color: isCurrentSelect ? Colors.blue : Colors.grey,
               ),
             ),
             child: image,

+ 2 - 2
lib/view/measure/measure_view.dart

@@ -352,7 +352,7 @@ class _MeasureMainPageState extends State<MeasureMainPage> {
       return ExamImageInfo(
         vidUrl,
         imgInfo.previewUrl!,
-        remedicalAISelectedInfoCode: e.remedicalCode,
+        remedicalCode: e.remedicalCode,
       );
     }).toList();
 
@@ -392,7 +392,7 @@ class _MeasureMainPageState extends State<MeasureMainPage> {
       var remedicalInfo = await measureData.getImageInfo(
         currentImage.remedicalCode ?? '',
         _curToken,
-        e!.remedicalAISelectedInfoCode,
+        e!.remedicalCode,
       );
       if (remedicalInfo != null) {
         measureData.aiResults = remedicalInfo.diagnosisResult ?? '';

+ 31 - 20
lib/view/paint/parts/ai_resul_info.dart

@@ -6,6 +6,8 @@ import 'package:fis_i18n/i18n.dart';
 import 'package:fis_measure/interfaces/process/standard_line/calibration.dart';
 import 'package:fis_measure/interfaces/process/workspace/application.dart';
 import 'package:fis_measure/process/visual/visual.dart';
+import 'package:fis_measure/process/workspace/third_part/application.dart';
+import 'package:fis_measure/process/workspace/third_part/calibration_controller.dart';
 import 'package:fis_measure/process/workspace/visual_loader.dart';
 import 'package:fis_measure/values/unit_desc.dart';
 import 'package:fis_measure/view/paint/ai_patint_controller.dart';
@@ -18,7 +20,7 @@ import 'package:vid/us/vid_us_unit.dart';
 class ResultInfo extends StatefulWidget {
   const ResultInfo(this.aiDetectedObject, {Key? key}) : super(key: key);
 
-  final List<AIDetectedObject> aiDetectedObject;
+  final List<AIDetectedObject>? aiDetectedObject;
   @override
   State<ResultInfo> createState() => _ResultInfoState();
 }
@@ -36,15 +38,21 @@ class _ResultInfoState extends State<ResultInfo> {
   void initState() {
     _updateImagePhysicalSize();
     try {
-      standardLineCalibrationController =
-          Get.find<IStandardLineCalibrationController>();
+      if (application.isThirdPart) {
+        final standradLine = (application as ThirdPartApplication).standardLine;
+        standardLineCalibrationController =
+            StandardLineCalibrationController(application, standradLine);
+        Get.put<IStandardLineCalibrationController>(
+            standardLineCalibrationController!);
+        if (standardLineCalibrationController != null) {
+          standardLineCalibrationController!.editStateChanged
+              .addListener(onStandardLineUpdated);
+        }
+      }
     } catch (e) {
-      logger.e('standardLineCalibrationController cannot find', e);
-    }
-    if (standardLineCalibrationController != null) {
-      standardLineCalibrationController!.editStateChanged
-          .addListener(onStandardLineUpdated);
+      logger.e('standardLineCalibrationController cannot find ', e);
     }
+
     super.initState();
   }
 
@@ -64,7 +72,7 @@ class _ResultInfoState extends State<ResultInfo> {
   @override
   Widget build(BuildContext context) {
     final description = widget
-        .aiDetectedObject[aiPatintController.state.aiResultIndex].descriptions;
+        .aiDetectedObject?[aiPatintController.state.aiResultIndex].descriptions;
     var lesionSizeDescription = description?.firstWhereOrNull(
         (element) => element.type == DiagnosisDescriptionEnum.LesionSize);
     var lesionSize = lesionSizeDescription?.value ?? '';
@@ -163,16 +171,16 @@ class _ResultInfoState extends State<ResultInfo> {
                             width: 70,
                             height: 70,
                             child: Obx(() {
-                              final aiDetected = widget.aiDetectedObject[
+                              final aiDetected = widget.aiDetectedObject?[
                                   aiPatintController.state.aiResultIndex];
                               return CircularProgressIndicator(
                                 valueColor: AlwaysStoppedAnimation(
                                   _buildAITextColor(
-                                    aiDetected.label,
+                                    aiDetected?.label ?? 0,
                                   ),
                                 ),
                                 backgroundColor: Colors.grey,
-                                value: aiDetected.confidence,
+                                value: aiDetected?.confidence,
                               );
                             }),
                           ),
@@ -183,12 +191,12 @@ class _ResultInfoState extends State<ResultInfo> {
                               child: Obx(
                                 () {
                                   final confidence = widget
-                                      .aiDetectedObject[aiPatintController
+                                      .aiDetectedObject?[aiPatintController
                                           .state.aiResultIndex]
                                       .confidence;
                                   return Center(
                                     child: Text(
-                                      '${(confidence * 100).toStringAsFixed(1)}%',
+                                      '${(confidence ?? 0 * 100).toStringAsFixed(1)}%',
                                       style: const TextStyle(
                                         color: Colors.white,
                                         fontSize: 18,
@@ -326,21 +334,24 @@ class _ResultInfoState extends State<ResultInfo> {
     switch (aiPatintController.diagnosisOrgan) {
       case DiagnosisOrganEnum.Breast:
         return Obx(() {
-          aiDetectedObjectItem =
-              widget.aiDetectedObject[aiPatintController.state.aiResultIndex];
+          aiDetectedObjectItem = widget
+                  .aiDetectedObject?[aiPatintController.state.aiResultIndex] ??
+              AIDetectedObject();
           return _buildBreastDescription(aiDetectedObjectItem.label);
         });
 
       case DiagnosisOrganEnum.Liver:
         return Obx(() {
-          aiDetectedObjectItem =
-              widget.aiDetectedObject[aiPatintController.state.aiResultIndex];
+          aiDetectedObjectItem = widget
+                  .aiDetectedObject?[aiPatintController.state.aiResultIndex] ??
+              AIDetectedObject();
           return _buildLiverDescription(aiDetectedObjectItem.label);
         });
       case DiagnosisOrganEnum.Thyroid:
         return Obx(() {
-          aiDetectedObjectItem =
-              widget.aiDetectedObject[aiPatintController.state.aiResultIndex];
+          aiDetectedObjectItem = widget
+                  .aiDetectedObject?[aiPatintController.state.aiResultIndex] ??
+              AIDetectedObject();
           return _buildThyroidDescription(aiDetectedObjectItem.label);
         });
       default: