Przeglądaj źródła

[feat]亲密度分析,截图回复-对话分析,对接文件上传

hezihao 7 miesięcy temu
rodzic
commit
8579685ed4

+ 6 - 3
lib/di/get_it.config.dart

@@ -104,9 +104,6 @@ extension GetItInjectableX on _i174.GetIt {
     gh.factory<_i977.IntimacyAnalyseController>(
       () => _i977.IntimacyAnalyseController(),
     );
-    gh.factory<_i510.ConversationAnalysisController>(
-      () => _i510.ConversationAnalysisController(),
-    );
     gh.factory<_i279.IntimacyAnalyseScreenshotReplyController>(
       () => _i279.IntimacyAnalyseScreenshotReplyController(),
     );
@@ -309,6 +306,12 @@ extension GetItInjectableX on _i174.GetIt {
         gh<_i779.PaymentStatusManager>(),
       ),
     );
+    gh.factory<_i510.ConversationAnalysisController>(
+      () => _i510.ConversationAnalysisController(
+        gh<_i738.IntimacyAnalyzeConfigHelper>(),
+        gh<_i428.UploadFileManager>(),
+      ),
+    );
     gh.factory<_i666.IntimacyAnalyseUploadController>(
       () => _i666.IntimacyAnalyseUploadController(
         gh<_i283.IntimacyAnalyzeRepository>(),

+ 85 - 6
lib/module/intimacy_analyse/screenshot_reply/conversation_analysis/conversation_analysis_controller.dart

@@ -1,3 +1,5 @@
+import 'dart:io';
+
 import 'package:flutter/cupertino.dart';
 import 'package:get/get.dart';
 import 'package:injectable/injectable.dart';
@@ -6,11 +8,24 @@ import 'package:wechat_assets_picker/wechat_assets_picker.dart';
 
 import '../../../../data/bean/option_select_config.dart';
 import '../../../../data/bean/option_select_item.dart';
+import '../../../../data/bean/upload_info.dart';
 import '../../../../utils/image_picker_util.dart';
+import '../../../../utils/intimacy_analyze_config_helper.dart';
+import '../../../../utils/upload/upload_file_manager.dart';
+import '../../../../utils/upload/upload_scene_type.dart';
 
 /// 对话分析Controller
 @injectable
 class ConversationAnalysisController extends BaseController {
+  /// 上传场景
+  final UploadSceneType uploadSceneType = UploadSceneType.conversationAnalysis;
+
+  /// 亲密度分析帮助类
+  IntimacyAnalyzeConfigHelper intimacyAnalyzeConfigHelper;
+
+  /// 文件上传管理器
+  UploadFileManager uploadFileManager;
+
   /// 是否是上传页
   Rx<bool> isUploadPage = false.obs;
 
@@ -45,6 +60,20 @@ class ConversationAnalysisController extends BaseController {
   ● 你的主要爱语:肯定的言辞(如情话、鼓励)
   '''.obs;
 
+  /// 上传图片列表
+  RxList<UploadInfo> uploadInfoList = <UploadInfo>[].obs;
+
+  ConversationAnalysisController(
+    this.intimacyAnalyzeConfigHelper,
+    this.uploadFileManager,
+  );
+
+  @override
+  void onClose() {
+    uploadFileManager.deleteUploadInfoBySceneType(uploadSceneType);
+    super.onClose();
+  }
+
   @override
   void onReady() {
     super.onReady();
@@ -70,10 +99,7 @@ class ConversationAnalysisController extends BaseController {
   }
 
   /// 选中选项
-  void selectOption(
-      OptionSelectConfig rowConfig,
-      OptionSelectItem optionItem,
-      ) {
+  void selectOption(OptionSelectConfig rowConfig, OptionSelectItem optionItem) {
     // 先全部反选
     rowConfig.options =
         rowConfig.options.map((ele) {
@@ -90,21 +116,74 @@ class ConversationAnalysisController extends BaseController {
   void clickUnlockBtn(BuildContext context) async {}
 
   /// 点击查看分析按钮
-  void clickLookAnalyseBtn(BuildContext context) async {}
+  void clickLookAnalyseBtn(BuildContext context) async {
+    // TODO hezihao,要请求接口,进行分析,出报告,现在先让通过
+    hasReport.value = true;
+  }
 
   /// 点击上传按钮
   void clickUploadBtn(BuildContext context) async {
+    // 计算还可以上传多少张图片
+    int count =
+        intimacyAnalyzeConfigHelper.getMaxAssetsCount() - uploadInfoList.length;
+
     // 跳转到图片选择,并返回选择的图片列表
     List<AssetEntity> selectedAssetList = await ImagePickerUtil.pickImage(
       context,
-      maxAssetsCount: 9,
+      maxAssetsCount: count,
     );
     // 选择了图片,切换到上传视图
     if (selectedAssetList.isNotEmpty) {
+      _handleSelectedAssetUpload(selectedAssetList);
       isUploadPage.value = true;
     } else {
       // 没选择图片,切换到例子视图
       isUploadPage.value = false;
     }
   }
+
+  /// 删除上传信息
+  void deleteUploadInfo(UploadInfo uploadInfo) {
+    uploadFileManager.deleteUploadInfo(uploadInfo);
+    uploadInfoList.removeWhere((item) {
+      return item.id == uploadInfo.id;
+    });
+    uploadInfoList.refresh();
+  }
+
+  /// 处理文件上传
+  void _handleSelectedAssetUpload(List<AssetEntity> selectedAssetList) async {
+    for (var entity in selectedAssetList) {
+      // 获取文件路径
+      File? file = await entity.file;
+      if (file == null) {
+        continue;
+      }
+      // 添加到上传列表
+      uploadInfoList.add(
+        uploadFileManager.uploadFile(
+          sceneType: uploadSceneType,
+          file: file,
+          onUploadInfoUpdateCallback: (uploadInfo) {
+            // 上传信息更新时回调,更新UI
+            _updateUploadInfo(uploadInfo);
+          },
+        ),
+      );
+      uploadInfoList.refresh();
+    }
+  }
+
+  /// 更新上传信息
+  void _updateUploadInfo(UploadInfo uploadInfo) {
+    // 更新上传信息
+    var newList = [...uploadInfoList];
+    newList.map((item) {
+      if (item.id == uploadInfo.id) {
+        return uploadInfo;
+      }
+      return item;
+    }).toList();
+    uploadInfoList.value = newList;
+  }
 }

+ 53 - 47
lib/module/intimacy_analyse/screenshot_reply/conversation_analysis/conversation_analysis_view.dart

@@ -88,19 +88,23 @@ class ConversationAnalysisView
 
   /// 上传步骤卡片
   Widget _buildUploadCard() {
-    return UploadStepCard(
-      topTitleWidget: StepTitleWidget(
-        stepTitle: StringName.intimacyConversationAnalysis,
-        stepDesc: StringName.intimacyConversationAnalysisCardTip,
-      ),
-      onClickAddCallback: () {
-        if (Get.context != null) {
-          controller.clickUploadBtn(Get.context!);
-        }
-      },
-      // TODO hezihao,上传信息列表
-      imageUploadInfoList: [],
-    );
+    return Obx(() {
+      return UploadStepCard(
+        topTitleWidget: StepTitleWidget(
+          stepTitle: StringName.intimacyConversationAnalysis,
+          stepDesc: StringName.intimacyConversationAnalysisCardTip,
+        ),
+        onClickAddCallback: () {
+          if (Get.context != null) {
+            controller.clickUploadBtn(Get.context!);
+          }
+        },
+        imageUploadInfoList: controller.uploadInfoList.value,
+        onClickDeleteCallback: (uploadInfo) {
+          controller.deleteUploadInfo(uploadInfo);
+        },
+      );
+    });
   }
 
   /// 选项卡片
@@ -174,41 +178,43 @@ class ConversationAnalysisView
 
   /// 分析结果卡片
   Widget _buildAnalysisResultCard() {
-    return StepCard(
-      bgImageProvider: Assets.images.bgIntimacyAnalyseUploadCard.provider(),
-      topTitleWidget: StepTitleWidget(
-        stepTitle: StringName.intimacyAnalyseAnalysisResult,
-      ),
-      topIconWidget: Assets.images.iconIntimacyAnalysisResultTop.image(
-        height: 63.h,
-        width: 103.w,
-      ),
-      contentWidget: Column(
-        children: [
-          // 图片九宫格
-          Container(
-            margin: EdgeInsets.only(left: 12.w, right: 12.w),
-            padding: EdgeInsets.only(
-              left: 12.w,
-              top: 12.h,
-              right: 12.w,
-              bottom: 12.h,
-            ),
-            decoration: BoxDecoration(
-              color: ColorName.white,
-              borderRadius: BorderRadius.circular(16.r),
-            ),
-            child: UploadNineGrid(
-              mode: Mode.preview,
-              imageUploadInfoList: [],
-              maxCount: 9,
-              spacing: 8.0,
+    return Obx(() {
+      return StepCard(
+        bgImageProvider: Assets.images.bgIntimacyAnalyseUploadCard.provider(),
+        topTitleWidget: StepTitleWidget(
+          stepTitle: StringName.intimacyAnalyseAnalysisResult,
+        ),
+        topIconWidget: Assets.images.iconIntimacyAnalysisResultTop.image(
+          height: 63.h,
+          width: 103.w,
+        ),
+        contentWidget: Column(
+          children: [
+            // 图片九宫格
+            Container(
+              margin: EdgeInsets.only(left: 12.w, right: 12.w),
+              padding: EdgeInsets.only(
+                left: 12.w,
+                top: 12.h,
+                right: 12.w,
+                bottom: 12.h,
+              ),
+              decoration: BoxDecoration(
+                color: ColorName.white,
+                borderRadius: BorderRadius.circular(16.r),
+              ),
+              child: UploadNineGrid(
+                mode: Mode.preview,
+                imageUploadInfoList: controller.uploadInfoList.value,
+                maxCount: 9,
+                spacing: 8.0,
+              ),
             ),
-          ),
-          SizedBox(height: 10.h),
-        ],
-      ),
-    );
+            SizedBox(height: 10.h),
+          ],
+        ),
+      );
+    });
   }
 
   /// 分析结果,Markdown文档卡片