Ver código fonte

[feat]亲密度分析,亲密度分页报告-上传页,对接文件上传

hezihao 7 meses atrás
pai
commit
d7473e4262

+ 16 - 8
lib/di/get_it.config.dart

@@ -74,6 +74,7 @@ import '../module/store/store_controller.dart' as _i344;
 import '../module/store/suprise/goods_surprise_controller.dart' as _i935;
 import '../module/user_info/user_info_controller.dart' as _i866;
 import '../plugins/keyboard_method_handler.dart' as _i415;
+import '../utils/intimacy_analyze_config_helper.dart' as _i738;
 import '../utils/payment_status_manager.dart' as _i779;
 import '../utils/upload/upload_file_manager.dart' as _i428;
 import 'network_module.dart' as _i567;
@@ -225,12 +226,6 @@ extension GetItInjectableX on _i174.GetIt {
     gh.factory<_i161.KeyBoardController>(
       () => _i161.KeyBoardController(gh<_i274.KeyboardRepository>()),
     );
-    gh.factory<_i666.IntimacyAnalyseUploadController>(
-      () => _i666.IntimacyAnalyseUploadController(
-        gh<_i283.IntimacyAnalyzeRepository>(),
-        gh<_i428.UploadFileManager>(),
-      ),
-    );
     gh.factory<_i970.CharacterGroupContentController>(
       () => _i970.CharacterGroupContentController(
         gh<_i421.CharactersRepository>(),
@@ -290,8 +285,8 @@ extension GetItInjectableX on _i174.GetIt {
         gh<_i50.ConfigRepository>(),
       ),
     );
-    gh.factory<_i987.IntimacyAnalyseReportController>(
-      () => _i987.IntimacyAnalyseReportController(
+    gh.factory<_i738.IntimacyAnalyzeConfigHelper>(
+      () => _i738.IntimacyAnalyzeConfigHelper(
         gh<_i283.IntimacyAnalyzeRepository>(),
       ),
     );
@@ -314,6 +309,19 @@ extension GetItInjectableX on _i174.GetIt {
         gh<_i779.PaymentStatusManager>(),
       ),
     );
+    gh.factory<_i666.IntimacyAnalyseUploadController>(
+      () => _i666.IntimacyAnalyseUploadController(
+        gh<_i283.IntimacyAnalyzeRepository>(),
+        gh<_i738.IntimacyAnalyzeConfigHelper>(),
+        gh<_i428.UploadFileManager>(),
+      ),
+    );
+    gh.factory<_i987.IntimacyAnalyseReportController>(
+      () => _i987.IntimacyAnalyseReportController(
+        gh<_i283.IntimacyAnalyzeRepository>(),
+        gh<_i738.IntimacyAnalyzeConfigHelper>(),
+      ),
+    );
     return this;
   }
 }

+ 9 - 16
lib/module/intimacy_analyse/analyse_report/intimacy_analyse_report_view_controller.dart

@@ -6,6 +6,7 @@ import 'package:wechat_assets_picker/wechat_assets_picker.dart';
 import '../../../data/api/response/intimacy_analyze_config_response.dart';
 import '../../../data/repository/intimacy_analyze_repository.dart';
 import '../../../utils/image_picker_util.dart';
+import '../../../utils/intimacy_analyze_config_helper.dart';
 import '../intimacy_analyse_upload/intimacy_analyse_upload_page.dart';
 
 /// 亲密度分析-分析报告Tab-Controller
@@ -14,6 +15,9 @@ class IntimacyAnalyseReportController extends BaseController {
   /// 亲密度分析Repository
   IntimacyAnalyzeRepository intimacyAnalyzeRepository;
 
+  /// 亲密度分析帮助类
+  IntimacyAnalyzeConfigHelper intimacyAnalyzeConfigHelper;
+
   /// 亲密度配置
   Rxn<IntimacyAnalyzeConfigResponse> get intimacyAnalyzeConfig =>
       intimacyAnalyzeRepository.intimacyAnalyzeConfig;
@@ -21,7 +25,10 @@ class IntimacyAnalyseReportController extends BaseController {
   /// 报告预览数据
   RxString reportPreviewData = "".obs;
 
-  IntimacyAnalyseReportController(this.intimacyAnalyzeRepository);
+  IntimacyAnalyseReportController(
+    this.intimacyAnalyzeRepository,
+    this.intimacyAnalyzeConfigHelper,
+  );
 
   @override
   void onInit() {
@@ -51,25 +58,11 @@ class IntimacyAnalyseReportController extends BaseController {
     // 跳转到图片选择,并返回选择的图片列表
     List<AssetEntity> selectedAssetList = await ImagePickerUtil.pickImage(
       context,
-      maxAssetsCount: getMaxAssetsCount(),
+      maxAssetsCount: intimacyAnalyzeConfigHelper.getMaxAssetsCount(),
     );
     // 跳转到亲密度分析上传页
     if (selectedAssetList.isNotEmpty) {
       IntimacyAnalyseUploadPage.start(selectedAssetList);
     }
   }
-
-  /// 最多,可以选多少张图片
-  int getMaxAssetsCount() {
-    var config = intimacyAnalyzeConfig.value;
-    if (config == null) {
-      return 1;
-    }
-    // 最多选多少张
-    if (config.maxImageCount != null) {
-      return config.maxImageCount!;
-    }
-    // 最少选多少张
-    return config.minImageCount ?? 1;
-  }
 }

+ 19 - 3
lib/module/intimacy_analyse/intimacy_analyse_upload/intimacy_analyse_upload_controller.dart

@@ -14,6 +14,7 @@ import '../../../data/repository/intimacy_analyze_repository.dart';
 import '../../../router/app_page_arguments.dart';
 import '../../../utils/atmob_log.dart';
 import '../../../utils/image_picker_util.dart';
+import '../../../utils/intimacy_analyze_config_helper.dart';
 import '../../../utils/upload/upload_file_manager.dart';
 
 /// 亲密度分析上传页Controller
@@ -27,6 +28,9 @@ class IntimacyAnalyseUploadController extends BaseController {
   /// 亲密度分析Repository
   IntimacyAnalyzeRepository intimacyAnalyzeRepository;
 
+  /// 亲密度分析帮助类
+  IntimacyAnalyzeConfigHelper intimacyAnalyzeConfigHelper;
+
   /// 文件上传管理器
   UploadFileManager uploadFileManager;
 
@@ -82,6 +86,7 @@ class IntimacyAnalyseUploadController extends BaseController {
 
   IntimacyAnalyseUploadController(
     this.intimacyAnalyzeRepository,
+    this.intimacyAnalyzeConfigHelper,
     this.uploadFileManager,
   );
 
@@ -213,14 +218,19 @@ class IntimacyAnalyseUploadController extends BaseController {
 
   /// 点击上传按钮
   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) {
-    } else {}
+      _handleSelectedAssetUpload(selectedAssetList);
+    }
   }
 
   /// 切换Ai模型
@@ -247,4 +257,10 @@ class IntimacyAnalyseUploadController extends BaseController {
     // 由于Rx响应式变量,无法监听对象中嵌套对象的某个属性的变化,导致页面不会刷新,需要手动刷新页面
     directionOptionSelectConfigList.refresh();
   }
+
+  /// 点击了下一步按钮
+  void clickNextBtn() {
+    // TODO hezihao,需要判断是否解锁,未解锁弹出购买弹窗,目前先直接让通过
+    isUploadPage.value = false;
+  }
 }

+ 51 - 42
lib/module/intimacy_analyse/intimacy_analyse_upload/intimacy_analyse_upload_page.dart

@@ -664,27 +664,32 @@ class IntimacyAnalyseUploadPage
 
   /// 下一步按钮
   Widget _buildNextBtn() {
-    return Container(
-      padding: EdgeInsets.only(top: 13.h, bottom: 13.h),
-      decoration: BoxDecoration(
-        color: ColorName.colorBrand,
-        borderRadius: BorderRadius.all(Radius.circular(30.r)),
-      ),
-      child: Row(
-        mainAxisAlignment: MainAxisAlignment.center,
-        crossAxisAlignment: CrossAxisAlignment.center,
-        children: [
-          Assets.images.iconLock.image(width: 22.w, height: 22.h),
-          SizedBox(width: 8.w),
-          Text(
-            StringName.nextStep,
-            style: TextStyle(
-              color: ColorName.white,
-              fontSize: 16.sp,
-              fontWeight: FontWeight.w500,
+    return GestureDetector(
+      onTap: () {
+        controller.clickNextBtn();
+      },
+      child: Container(
+        padding: EdgeInsets.only(top: 13.h, bottom: 13.h),
+        decoration: BoxDecoration(
+          color: ColorName.colorBrand,
+          borderRadius: BorderRadius.all(Radius.circular(30.r)),
+        ),
+        child: Row(
+          mainAxisAlignment: MainAxisAlignment.center,
+          crossAxisAlignment: CrossAxisAlignment.center,
+          children: [
+            Assets.images.iconLock.image(width: 22.w, height: 22.h),
+            SizedBox(width: 8.w),
+            Text(
+              StringName.nextStep,
+              style: TextStyle(
+                color: ColorName.white,
+                fontSize: 16.sp,
+                fontWeight: FontWeight.w500,
+              ),
             ),
-          ),
-        ],
+          ],
+        ),
       ),
     );
   }
@@ -733,27 +738,29 @@ class IntimacyAnalyseUploadPage
 
   /// 构建卡片列表
   Widget _buildCardList() {
-    // 上传页
-    if (controller.isUploadPage.value) {
-      return Column(
-        children: [
-          // 上传卡片
-          _buildUploadStepCard(),
-          // 预测方向卡片
-          _buildPredictionDirectionStepCard(),
-        ],
-      );
-    } else {
-      // 报告页
-      return Column(
-        children: [
-          // 分析结果卡片
-          _buildAnalysisResultCard(),
-          // 报告结果卡片
-          _buildAnalysisReport(),
-        ],
-      );
-    }
+    return Obx(() {
+      // 上传页
+      if (controller.isUploadPage.value) {
+        return Column(
+          children: [
+            // 上传卡片
+            _buildUploadStepCard(),
+            // 预测方向卡片
+            _buildPredictionDirectionStepCard(),
+          ],
+        );
+      } else {
+        // 报告页
+        return Column(
+          children: [
+            // 分析结果卡片
+            _buildAnalysisResultCard(),
+            // 报告结果卡片
+            _buildAnalysisReport(),
+          ],
+        );
+      }
+    });
   }
 
   /// 内容
@@ -770,7 +777,9 @@ class IntimacyAnalyseUploadPage
             left: 0,
             right: 0,
             bottom: 0,
-            child: _buildBottomActionBtn(),
+            child: Obx(() {
+              return _buildBottomActionBtn();
+            }),
           ),
         ],
       ),

+ 32 - 0
lib/utils/intimacy_analyze_config_helper.dart

@@ -0,0 +1,32 @@
+import 'package:get/get_rx/src/rx_types/rx_types.dart';
+import 'package:injectable/injectable.dart';
+
+import '../data/api/response/intimacy_analyze_config_response.dart';
+import '../data/repository/intimacy_analyze_repository.dart';
+
+/// 亲密度配置的帮助类
+@injectable
+class IntimacyAnalyzeConfigHelper {
+  /// 亲密度分析Repository
+  IntimacyAnalyzeRepository intimacyAnalyzeRepository;
+
+  /// 亲密度配置
+  Rxn<IntimacyAnalyzeConfigResponse> get intimacyAnalyzeConfig =>
+      intimacyAnalyzeRepository.intimacyAnalyzeConfig;
+
+  IntimacyAnalyzeConfigHelper(this.intimacyAnalyzeRepository);
+
+  /// 最多,可以选多少张图片
+  int getMaxAssetsCount() {
+    var config = intimacyAnalyzeConfig.value;
+    if (config == null) {
+      return 1;
+    }
+    // 最多选多少张
+    if (config.maxImageCount != null) {
+      return config.maxImageCount!;
+    }
+    // 最少选多少张
+    return config.minImageCount ?? 1;
+  }
+}