浏览代码

重构代码 及一些修改 reviewed by jimmy

Caroline 2 年之前
父节点
当前提交
72209103ef
共有 1 个文件被更改,包括 165 次插入198 次删除
  1. 165 198
      lib/components/picture_components.dart

+ 165 - 198
lib/components/picture_components.dart

@@ -31,14 +31,18 @@ class TerminalImage {
   }
 }
 
+class QuickFWidget extends StatelessWidget implements FWidget {
+  const QuickFWidget(this.child, {Key? key}) : super(key: key);
+  final Widget child;
+  @override
+  Widget build(BuildContext context) => child;
+}
+
 /// 所有图片的入口
-class ContentImage extends StatelessWidget implements FWidget {
+class FContentImage extends StatelessWidget implements FWidget {
   /// 图片参数
   final RemedicalInfoDTO? remedicalInfo;
 
-  /// 图片地址
-  final TerminalImage terminalImage;
-
   /// 是否是测量页面
   final bool? isMeasure;
 
@@ -48,15 +52,15 @@ class ContentImage extends StatelessWidget implements FWidget {
   /// 图片单机事件
   final VoidCallback? onTap;
 
-  /// 扫查部位
-  final String? application;
-
   /// AI 良恶性
   late final DiagnosisConclusionEnum diagnosisConclusion =
       remedicalInfo?.diagnosisConclusion ?? DiagnosisConclusionEnum.NotRequired;
 
   /// 图片类型
-  final RemedicalFileDataTypeEnum fileDataType;
+  late RemedicalFileDataTypeEnum? fileDataType;
+
+  /// 图片地址
+  late TerminalImage? terminalImage;
 
   /// AI测量的器官
   late final List<DiagnosisOrganEnum>? diagnosisOrgans =
@@ -78,30 +82,39 @@ class ContentImage extends StatelessWidget implements FWidget {
   /// 是否是选择状态
   final bool isSelectStutas;
 
-  ContentImage({
+  FContentImage({
     Key? key,
-    required this.terminalImage,
-    required this.fileDataType,
+    this.terminalImage,
+    this.fileDataType,
     this.remedicalInfo,
     this.isMeasure = false,
     this.onDoubleTap,
     this.onTap,
     this.isSelectStutas = false,
-    this.application,
   }) : super(key: key);
 
   @override
-  Widget build(BuildContext context) {
+  FWidget build(BuildContext context) {
+    if (terminalImage == null) {
+      terminalImage = new TerminalImage(
+          previewUrl: remedicalInfo?.terminalImages?.previewUrl ?? '',
+          imageUrl: remedicalInfo?.terminalImages?.imageUrl ?? '',
+          coverImageUrl: remedicalInfo?.terminalImages?.coverImageUrl ?? '');
+    }
+    if (fileDataType == null) {
+      fileDataType = remedicalInfo?.fileDataType;
+    }
+
     if (isSelectStutas) {
-      return Container(
+      return FContainer(
         width: 190,
         height: 160,
         color: Colors.black,
-        child: Stack(
+        child: FStack(
           children: [
-            Center(
-              child: Image.network(
-                terminalImage.previewUrl!,
+            FCenter(
+              child: FImage.network(
+                terminalImage!.previewUrl!,
                 errorBuilder: ((context, error, stackTrace) {
                   return Container(
                     child: Text('error'),
@@ -113,14 +126,13 @@ class ContentImage extends StatelessWidget implements FWidget {
         ),
       );
     } else
-      return _buildContentImage(
-        fileDataType,
-        terminalImage.previewUrl!,
+      return _buildFContentImage(
+        fileDataType!,
+        terminalImage!.previewUrl!,
       );
   }
 
-  /// 0
-  Widget _buildContentImage(
+  FWidget _buildFContentImage(
     RemedicalFileDataTypeEnum fileDataType,
     String previewUrl,
   ) {
@@ -137,16 +149,136 @@ class ContentImage extends StatelessWidget implements FWidget {
           previewUrl,
         );
       default:
-        return Container(
-          child: Text('error'),
+        return FContainer(
+          child: FText('error'),
         );
     }
   }
 
-  Widget _buildVidMovieCard(
+  FWidget _buildLeftAIOrCarotidLogo() {
+    if (hasDiagnosisOrgans) {
+      return FPositioned(
+        bottom: 5,
+        left: 5,
+        child: _buildAIDiagnosticOrgans(),
+      );
+    }
+    if (isCarotidResult) {
+      return FPositioned(
+        bottom: 5,
+        left: 5,
+        child: FIcon(
+          FIcons.arteria_carotis,
+          color: Colors.lightBlue,
+        ),
+      );
+    }
+    return FPositioned(
+      bottom: 5,
+      left: 5,
+      child: FText(
+        remedicalInfo?.application ?? "",
+        style: TextStyle(
+          color: Colors.white,
+          fontSize: 8,
+          overflow: TextOverflow.ellipsis,
+        ),
+      ),
+    );
+  }
+
+  FWidget _buildRigthAIText() {
+    if (hasDiagnosisOrgans) {
+      return FPositioned(
+        bottom: 5,
+        right: 5,
+        child: QuickFWidget(
+          Tooltip(
+            textStyle: TextStyle(
+              fontSize: 16,
+              color: Colors.white,
+            ),
+            message: _buildAIText(diagnosisConclusion),
+            child: FText(
+              'AI',
+              style: TextStyle(
+                color: _buildAITextColor(
+                  diagnosisConclusion,
+                ),
+                fontSize: 20,
+              ),
+            ),
+          ),
+        ),
+      );
+    }
+
+    if (isCarotidResult) {
+      return FPositioned(
+        bottom: 5,
+        right: 5,
+        child: FIcon(
+          FIcons.three_dimensional,
+          color: Colors.lightBlue,
+        ),
+      );
+    }
+    return FSizedBox();
+  }
+
+  FWidget _buildVidMovieCard(
     String previewUrl,
   ) {
-    return Listener(
+    return FContainer(
+      width: 190,
+      height: 160,
+      color: Colors.black,
+      child: FStack(
+        children: [
+          FCenter(
+            child: FImage.network(
+              previewUrl,
+              errorBuilder: ((context, error, stackTrace) {
+                return Container(
+                  child: Text('error'),
+                );
+              }),
+            ),
+          ),
+          _buildLeftAIOrCarotidLogo(),
+          _buildRigthAIText(),
+          FInkWell(
+            onDoubleTap: () {
+              onDoubleTap?.call();
+            },
+            onTap: () {
+              onTap?.call();
+            },
+            child: Center(
+              child: Container(
+                child: Icon(
+                  Icons.play_circle_outline_rounded,
+                  color: Colors.white,
+                  size: 50,
+                ),
+              ),
+            ),
+          ),
+        ],
+      ),
+    );
+  }
+
+  FWidget _buildImageCard(
+    String previewUrl,
+  ) {
+    return FInkWell(
+      onDoubleTap: () {
+        onDoubleTap?.call();
+      },
+      onTap: () {
+        onTap?.call();
+      },
       child: Container(
         width: 190,
         height: 160,
@@ -163,179 +295,14 @@ class ContentImage extends StatelessWidget implements FWidget {
                 }),
               ),
             ),
-            hasDiagnosisOrgans
-                ? Positioned(
-                    bottom: 5,
-                    left: 5,
-                    child: _buildAIDiagnosticOrgans(),
-                  )
-                : FPositioned(
-                    bottom: 5,
-                    left: 5,
-                    child: FText(
-                      application!,
-                      style: TextStyle(
-                        color: Colors.white,
-                        fontSize: 8,
-                        overflow: TextOverflow.ellipsis,
-                      ),
-                    ),
-                  ),
-            if (isCarotidResult) ...[
-              Positioned(
-                bottom: 5,
-                left: 5,
-                child: FIcon(
-                  FIcons.arteria_carotis,
-                  color: Colors.lightBlue,
-                ),
-              ),
-              Positioned(
-                bottom: 5,
-                right: 5,
-                child: FIcon(
-                  FIcons.three_dimensional,
-                  color: Colors.lightBlue,
-                ),
-              ),
-            ],
-            InkWell(
-              onDoubleTap: () {
-                onDoubleTap?.call();
-              },
-              onTap: () {
-                onTap?.call();
-              },
-              child: Center(
-                child: Container(
-                  child: Icon(
-                    Icons.play_circle_outline_rounded,
-                    color: Colors.white,
-                    size: 50,
-                  ),
-                ),
-              ),
-            ),
-            isShowDiagnosisOrgans
-                ? Positioned(
-                    bottom: 5,
-                    right: 5,
-                    child: Tooltip(
-                      textStyle: TextStyle(
-                        fontSize: 16,
-                        color: Colors.white,
-                      ),
-                      message: _buildAIText(diagnosisConclusion),
-                      child: Text(
-                        'AI',
-                        style: TextStyle(
-                          color: _buildAITextColor(
-                            diagnosisConclusion,
-                          ),
-                          fontSize: 20,
-                        ),
-                      ),
-                    ),
-                  )
-                : const SizedBox(),
+            _buildLeftAIOrCarotidLogo(),
+            _buildRigthAIText(),
           ],
         ),
       ),
     );
   }
 
-  Widget _buildImageCard(
-    String previewUrl,
-  ) {
-    return Listener(
-      child: InkWell(
-        onDoubleTap: () {
-          onDoubleTap?.call();
-        },
-        onTap: () {
-          onTap?.call();
-        },
-        child: Container(
-          width: 190,
-          height: 160,
-          color: Colors.black,
-          child: Stack(
-            children: [
-              Center(
-                child: Image.network(
-                  previewUrl,
-                  errorBuilder: ((context, error, stackTrace) {
-                    return Container(
-                      child: Text('error'),
-                    );
-                  }),
-                ),
-              ),
-              hasDiagnosisOrgans
-                  ? Positioned(
-                      bottom: 5,
-                      left: 5,
-                      child: _buildAIDiagnosticOrgans(),
-                    )
-                  : FPositioned(
-                      bottom: 5,
-                      left: 5,
-                      child: FText(
-                        application!,
-                        style: TextStyle(
-                          color: Colors.white,
-                          fontSize: 8,
-                          overflow: TextOverflow.ellipsis,
-                        ),
-                      ),
-                    ),
-              if (isCarotidResult) ...[
-                Positioned(
-                  bottom: 5,
-                  left: 5,
-                  child: FIcon(
-                    FIcons.arteria_carotis,
-                    color: Colors.lightBlue,
-                  ),
-                ),
-                Positioned(
-                  bottom: 5,
-                  right: 5,
-                  child: FIcon(
-                    FIcons.three_dimensional,
-                    color: Colors.lightBlue,
-                  ),
-                ),
-              ],
-              isShowDiagnosisOrgans
-                  ? Positioned(
-                      bottom: 5,
-                      right: 5,
-                      child: Tooltip(
-                        textStyle: TextStyle(
-                          fontSize: 16,
-                          color: Colors.white,
-                        ),
-                        message: _buildAIText(diagnosisConclusion),
-                        child: Text(
-                          'AI',
-                          style: TextStyle(
-                            color: _buildAITextColor(
-                              diagnosisConclusion,
-                            ),
-                            fontSize: 20,
-                          ),
-                        ),
-                      ),
-                    )
-                  : const SizedBox(),
-            ],
-          ),
-        ),
-      ),
-    );
-  }
-
   String _buildAIText(DiagnosisConclusionEnum diagnosisConclusion) {
     switch (diagnosisConclusion) {
       case DiagnosisConclusionEnum.NotRequired:
@@ -372,12 +339,12 @@ class ContentImage extends StatelessWidget implements FWidget {
     }
   }
 
-  Widget _buildAIDiagnosticOrgans() {
+  FWidget _buildAIDiagnosticOrgans() {
     switch (diagnosisOrgans?[0]) {
       case DiagnosisOrganEnum.Null:
-        return const SizedBox();
+        return const FSizedBox();
       case DiagnosisOrganEnum.placeHolder_1:
-        return const SizedBox();
+        return const FSizedBox();
       case DiagnosisOrganEnum.Breast:
         return FIcon(
           FIcons.fis_breast,
@@ -423,7 +390,7 @@ class ContentImage extends StatelessWidget implements FWidget {
         );
 
       default:
-        return Container();
+        return FContainer();
     }
   }
 }