Browse Source

[feat]亲密度分析,增加上传图片跳转

hezihao 7 months ago
parent
commit
28e1c78f9e

+ 3 - 1
lib/module/intimacy_analyse/analyse_report/intimacy_analyse_report_view_controller.dart

@@ -44,6 +44,8 @@ class IntimacyAnalyseReportController extends BaseController {
       maxAssetsCount: 9,
       maxAssetsCount: 9,
     );
     );
     // 跳转到亲密度分析上传页
     // 跳转到亲密度分析上传页
-    IntimacyAnalyseUploadPage.start(selectedAssetList);
+    if (selectedAssetList.isNotEmpty) {
+      IntimacyAnalyseUploadPage.start(selectedAssetList);
+    }
   }
   }
 }
 }

+ 17 - 1
lib/module/intimacy_analyse/intimacy_analyse_upload/intimacy_analyse_upload_controller.dart

@@ -1,3 +1,4 @@
+import 'package:flutter/cupertino.dart';
 import 'package:get/get.dart';
 import 'package:get/get.dart';
 import 'package:injectable/injectable.dart';
 import 'package:injectable/injectable.dart';
 import 'package:keyboard/base/base_controller.dart';
 import 'package:keyboard/base/base_controller.dart';
@@ -6,6 +7,7 @@ import '../../../data/bean/option_select_config.dart';
 import '../../../data/bean/option_select_item.dart';
 import '../../../data/bean/option_select_item.dart';
 import '../../../router/app_page_arguments.dart';
 import '../../../router/app_page_arguments.dart';
 import '../../../utils/atmob_log.dart';
 import '../../../utils/atmob_log.dart';
+import '../../../utils/image_picker_util.dart';
 
 
 /// 亲密度分析上传页Controller
 /// 亲密度分析上传页Controller
 @injectable
 @injectable
@@ -30,7 +32,8 @@ class IntimacyAnalyseUploadController extends BaseController {
   RxBool isUploadPage = true.obs;
   RxBool isUploadPage = true.obs;
 
 
   /// 报告的markdown数据
   /// 报告的markdown数据
-  RxString reportMarkdownData = '''
+  RxString reportMarkdownData =
+      '''
   **性格匹配度**
   **性格匹配度**
 
 
   ● 互补型:一方外向活泼,另一方沉稳内敛,形成动态平衡。
   ● 互补型:一方外向活泼,另一方沉稳内敛,形成动态平衡。
@@ -67,6 +70,7 @@ class IntimacyAnalyseUploadController extends BaseController {
     _initDirectionOptionSelectConfigList();
     _initDirectionOptionSelectConfigList();
   }
   }
 
 
+  /// 初始化预测方向选项列表
   void _initDirectionOptionSelectConfigList() {
   void _initDirectionOptionSelectConfigList() {
     directionOptionSelectConfigList.add(
     directionOptionSelectConfigList.add(
       OptionSelectConfig("初相识", "", [
       OptionSelectConfig("初相识", "", [
@@ -111,6 +115,18 @@ class IntimacyAnalyseUploadController extends BaseController {
     Get.back();
     Get.back();
   }
   }
 
 
+  /// 点击上传按钮
+  void clickUploadBtn(BuildContext context) async {
+    // 跳转到图片选择,并返回选择的图片列表
+    List<AssetEntity> selectedAssetList = await ImagePickerUtil.pickImage(
+      context,
+      maxAssetsCount: 9,
+    );
+    // 选择了图片
+    if (selectedAssetList.isNotEmpty) {
+    } else {}
+  }
+
   /// 切换Ai模型
   /// 切换Ai模型
   void switchAiModel(String newAiModel) {
   void switchAiModel(String newAiModel) {
     currentAiModel.value = newAiModel;
     currentAiModel.value = newAiModel;

+ 5 - 0
lib/module/intimacy_analyse/intimacy_analyse_upload/intimacy_analyse_upload_page.dart

@@ -142,6 +142,11 @@ class IntimacyAnalyseUploadPage
       ),
       ),
       // 底部,添加上当前的亲密关系
       // 底部,添加上当前的亲密关系
       bottomChild: _buildRecommendIntimacy(),
       bottomChild: _buildRecommendIntimacy(),
+      onClickAddCallback: () {
+        if (Get.context != null) {
+          controller.clickUploadBtn(Get.context!);
+        }
+      },
     );
     );
   }
   }
 
 

+ 1 - 1
lib/module/intimacy_analyse/intimacy_analyse_upload/widget/upload_add_widget.dart

@@ -16,7 +16,7 @@ class UploadAddWidget extends StatelessWidget {
   /// 还可以上传多少个文件
   /// 还可以上传多少个文件
   final int residueCount;
   final int residueCount;
 
 
-  /// 回调
+  /// 点击上传按钮的回调
   final OnClickAddCallback? onClickAddCallback;
   final OnClickAddCallback? onClickAddCallback;
 
 
   const UploadAddWidget({
   const UploadAddWidget({

+ 8 - 4
lib/module/intimacy_analyse/intimacy_analyse_upload/widget/upload_nine_grid.dart

@@ -8,7 +8,7 @@ enum Mode {
   edit,
   edit,
 
 
   /// 预览模式
   /// 预览模式
-  preview
+  preview,
 }
 }
 
 
 /// 上传九宫格
 /// 上传九宫格
@@ -25,12 +25,16 @@ class UploadNineGrid extends StatelessWidget {
   /// 图片间距
   /// 图片间距
   final double spacing;
   final double spacing;
 
 
+  /// 点击上传按钮的回调
+  final OnClickAddCallback? onClickAddCallback;
+
   const UploadNineGrid({
   const UploadNineGrid({
     super.key,
     super.key,
     required this.mode,
     required this.mode,
     required this.imageSrcList,
     required this.imageSrcList,
     this.maxCount = 9,
     this.maxCount = 9,
     this.spacing = 2.0,
     this.spacing = 2.0,
+    this.onClickAddCallback,
   });
   });
 
 
   @override
   @override
@@ -55,10 +59,10 @@ class UploadNineGrid extends StatelessWidget {
         // 添加图片的条目
         // 添加图片的条目
         if (index >= imageSrcList.length) {
         if (index >= imageSrcList.length) {
           return UploadAddWidget(
           return UploadAddWidget(
+            // 剩余多少张图片,可以上传
             residueCount: maxCount - imageSrcList.length,
             residueCount: maxCount - imageSrcList.length,
-            onClickAddCallback: () {
-              // 上传图片
-            },
+            // 点击上传图片
+            onClickAddCallback: onClickAddCallback,
           );
           );
         } else {
         } else {
           // 上传项
           // 上传项

+ 7 - 0
lib/module/intimacy_analyse/screenshot_reply/conversation_analysis/conversation_analysis_view.dart

@@ -1,5 +1,7 @@
 import 'package:flutter/material.dart';
 import 'package:flutter/material.dart';
 import 'package:flutter_screenutil/flutter_screenutil.dart';
 import 'package:flutter_screenutil/flutter_screenutil.dart';
+import 'package:get/get.dart';
+import 'package:get/get_core/src/get_main.dart';
 import 'package:get/get_state_manager/src/rx_flutter/rx_obx_widget.dart';
 import 'package:get/get_state_manager/src/rx_flutter/rx_obx_widget.dart';
 import 'package:keyboard/base/base_view.dart';
 import 'package:keyboard/base/base_view.dart';
 import 'package:keyboard/widget/markdown/markdown_viewer.dart';
 import 'package:keyboard/widget/markdown/markdown_viewer.dart';
@@ -93,6 +95,11 @@ class ConversationAnalysisView
         stepTitle: StringName.intimacyConversationAnalysis,
         stepTitle: StringName.intimacyConversationAnalysis,
         stepDesc: StringName.intimacyConversationAnalysisCardTip,
         stepDesc: StringName.intimacyConversationAnalysisCardTip,
       ),
       ),
+      onClickAddCallback: () {
+        if (Get.context != null) {
+          controller.clickUploadBtn(Get.context!);
+        }
+      },
     );
     );
   }
   }
 
 

+ 18 - 10
lib/module/intimacy_analyse/screenshot_reply/scan_image_reply/scan_image_reply_controller.dart

@@ -1,9 +1,12 @@
+import 'package:flutter/cupertino.dart';
 import 'package:get/get_rx/src/rx_types/rx_types.dart';
 import 'package:get/get_rx/src/rx_types/rx_types.dart';
 import 'package:injectable/injectable.dart';
 import 'package:injectable/injectable.dart';
 import 'package:keyboard/base/base_controller.dart';
 import 'package:keyboard/base/base_controller.dart';
+import 'package:wechat_assets_picker/wechat_assets_picker.dart';
 
 
 import '../../../../data/bean/option_select_config.dart';
 import '../../../../data/bean/option_select_config.dart';
 import '../../../../data/bean/option_select_item.dart';
 import '../../../../data/bean/option_select_item.dart';
+import '../../../../utils/image_picker_util.dart';
 
 
 /// 识图回复Controller
 /// 识图回复Controller
 @injectable
 @injectable
@@ -13,21 +16,16 @@ class ScanImageReplyController extends BaseController {
       <OptionSelectConfig>[].obs;
       <OptionSelectConfig>[].obs;
 
 
   /// 是否上传页
   /// 是否上传页
-  RxBool isUploadPage = false.obs;
+  RxBool isUploadPage = true.obs;
 
 
   /// Ai模型列表
   /// Ai模型列表
-  RxList<String> replyModelList =
-      <String>['评论模式', '搭讪模式'].obs;
+  RxList<String> replyModelList = <String>['评论模式', '搭讪模式'].obs;
 
 
   /// 当前应用的Ai模型
   /// 当前应用的Ai模型
   Rx<String> currentReplyMode = '评论模式'.obs;
   Rx<String> currentReplyMode = '评论模式'.obs;
 
 
   /// 回复语气列表
   /// 回复语气列表
-  RxList<String> replyToneList = <String>[
-    "真好",
-    "真好看",
-    "真的很好看~",
-  ].obs;
+  RxList<String> replyToneList = <String>["真好", "真好看", "真的很好看~"].obs;
 
 
   @override
   @override
   void onReady() {
   void onReady() {
@@ -74,8 +72,18 @@ class ScanImageReplyController extends BaseController {
   }
   }
 
 
   /// 点击上传截图按钮
   /// 点击上传截图按钮
-  void clickUploadScreenshotBtn() {
-    isUploadPage.value = true;
+  void clickUploadScreenshotBtn(BuildContext context) async {
+    // 跳转到图片选择,并返回选择的图片列表
+    List<AssetEntity> selectedAssetList = await ImagePickerUtil.pickImage(
+      context,
+      maxAssetsCount: 9,
+    );
+    // 切换为上传页
+    if (selectedAssetList.isNotEmpty) {
+      isUploadPage.value = false;
+    } else {
+      isUploadPage.value = true;
+    }
   }
   }
 
 
   /// 点击获取回复按钮
   /// 点击获取回复按钮

+ 46 - 33
lib/module/intimacy_analyse/screenshot_reply/scan_image_reply/scan_image_reply_view.dart

@@ -1,5 +1,7 @@
 import 'package:flutter/material.dart';
 import 'package:flutter/material.dart';
 import 'package:flutter_screenutil/flutter_screenutil.dart';
 import 'package:flutter_screenutil/flutter_screenutil.dart';
+import 'package:get/get.dart';
+import 'package:get/get_core/src/get_main.dart';
 import 'package:get/get_state_manager/src/rx_flutter/rx_obx_widget.dart';
 import 'package:get/get_state_manager/src/rx_flutter/rx_obx_widget.dart';
 import 'package:keyboard/base/base_view.dart';
 import 'package:keyboard/base/base_view.dart';
 
 
@@ -83,18 +85,26 @@ class ScanImageReplyView extends BaseView<ScanImageReplyController> {
       );
       );
     } else {
     } else {
       // 重新上传按钮
       // 重新上传按钮
-      actionBtn = Container(
-        padding: EdgeInsets.symmetric(vertical: 8.h, horizontal: 12.w),
-        decoration: BoxDecoration(
-          color: ColorName.black80,
-          borderRadius: BorderRadius.circular(30.r),
-        ),
-        child: Text(
-          StringName.intimacyAnalyseReUpload,
-          style: TextStyle(
-            color: ColorName.white,
-            fontSize: 12.sp,
-            fontWeight: FontWeight.w500,
+      actionBtn = GestureDetector(
+        onTap: () {
+          BuildContext? context = Get.context;
+          if (context != null) {
+            controller.clickUploadScreenshotBtn(context);
+          }
+        },
+        child: Container(
+          padding: EdgeInsets.symmetric(vertical: 8.h, horizontal: 12.w),
+          decoration: BoxDecoration(
+            color: ColorName.black80,
+            borderRadius: BorderRadius.circular(30.r),
+          ),
+          child: Text(
+            StringName.intimacyAnalyseReUpload,
+            style: TextStyle(
+              color: ColorName.white,
+              fontSize: 12.sp,
+              fontWeight: FontWeight.w500,
+            ),
           ),
           ),
         ),
         ),
       );
       );
@@ -321,23 +331,26 @@ class ScanImageReplyView extends BaseView<ScanImageReplyController> {
 
 
   /// 重试按钮
   /// 重试按钮
   Widget _buildRetryBtn() {
   Widget _buildRetryBtn() {
-    return Container(
-      padding: EdgeInsets.symmetric(horizontal: 28.w, vertical: 8.h),
-      decoration: BoxDecoration(
-        // 渐变背景
-        gradient: LinearGradient(
-          colors: [ColorName.purpleGradient3, ColorName.purpleGradient4],
-          begin: Alignment.centerLeft,
-          end: Alignment.centerRight,
+    return GestureDetector(
+      onTap: () {},
+      child: Container(
+        padding: EdgeInsets.symmetric(horizontal: 28.w, vertical: 8.h),
+        decoration: BoxDecoration(
+          // 渐变背景
+          gradient: LinearGradient(
+            colors: [ColorName.purpleGradient3, ColorName.purpleGradient4],
+            begin: Alignment.centerLeft,
+            end: Alignment.centerRight,
+          ),
+          borderRadius: BorderRadius.all(Radius.circular(30.r)),
         ),
         ),
-        borderRadius: BorderRadius.all(Radius.circular(30.r)),
-      ),
-      child: Text(
-        StringName.retry,
-        style: TextStyle(
-          color: ColorName.white,
-          fontSize: 14.sp,
-          fontWeight: FontWeight.w400,
+        child: Text(
+          StringName.retry,
+          style: TextStyle(
+            color: ColorName.white,
+            fontSize: 14.sp,
+            fontWeight: FontWeight.w400,
+          ),
         ),
         ),
       ),
       ),
     );
     );
@@ -414,10 +427,10 @@ class ScanImageReplyView extends BaseView<ScanImageReplyController> {
   }
   }
 
 
   /// 上传截图按钮
   /// 上传截图按钮
-  Widget _buildUploadScreenshotBtn() {
+  Widget _buildUploadScreenshotBtn(BuildContext context) {
     return GestureDetector(
     return GestureDetector(
       onTap: () {
       onTap: () {
-        controller.clickUploadScreenshotBtn();
+        controller.clickUploadScreenshotBtn(context);
       },
       },
       child: Container(
       child: Container(
         margin: EdgeInsets.symmetric(horizontal: 16.w),
         margin: EdgeInsets.symmetric(horizontal: 16.w),
@@ -551,7 +564,7 @@ class ScanImageReplyView extends BaseView<ScanImageReplyController> {
   }
   }
 
 
   /// 底部操作按钮
   /// 底部操作按钮
-  Widget _buildBottomActionBtn() {
+  Widget _buildBottomActionBtn(BuildContext context) {
     if (controller.isUploadPage.value) {
     if (controller.isUploadPage.value) {
       // 上传页,显示上传截图按钮
       // 上传页,显示上传截图按钮
       return Container(
       return Container(
@@ -562,7 +575,7 @@ class ScanImageReplyView extends BaseView<ScanImageReplyController> {
           right: 16.w,
           right: 16.w,
           bottom: 20.h,
           bottom: 20.h,
         ),
         ),
-        child: _buildUploadScreenshotBtn(),
+        child: _buildUploadScreenshotBtn(context),
       );
       );
     } else {
     } else {
       // 结果页,显示2个按钮,模式切换按钮和获取回复按钮
       // 结果页,显示2个按钮,模式切换按钮和获取回复按钮
@@ -592,7 +605,7 @@ class ScanImageReplyView extends BaseView<ScanImageReplyController> {
         crossAxisAlignment: CrossAxisAlignment.start,
         crossAxisAlignment: CrossAxisAlignment.start,
         children: [
         children: [
           // 操作按钮
           // 操作按钮
-          _buildBottomActionBtn(),
+          _buildBottomActionBtn(context),
         ],
         ],
       );
       );
     });
     });

+ 6 - 0
lib/module/intimacy_analyse/widget/step/upload_step_card.dart

@@ -3,6 +3,7 @@ import 'package:flutter_screenutil/flutter_screenutil.dart';
 
 
 import '../../../../resource/assets.gen.dart';
 import '../../../../resource/assets.gen.dart';
 import '../../../../resource/colors.gen.dart';
 import '../../../../resource/colors.gen.dart';
+import '../../intimacy_analyse_upload/widget/upload_add_widget.dart';
 import '../../intimacy_analyse_upload/widget/upload_nine_grid.dart';
 import '../../intimacy_analyse_upload/widget/upload_nine_grid.dart';
 import '../step_card.dart';
 import '../step_card.dart';
 
 
@@ -14,10 +15,14 @@ class UploadStepCard extends StatelessWidget {
   /// 底部的子组件,可以没有
   /// 底部的子组件,可以没有
   final Widget? bottomChild;
   final Widget? bottomChild;
 
 
+  /// 点击上传按钮的回调
+  final OnClickAddCallback? onClickAddCallback;
+
   const UploadStepCard({
   const UploadStepCard({
     super.key,
     super.key,
     this.topTitleWidget,
     this.topTitleWidget,
     this.bottomChild,
     this.bottomChild,
+    this.onClickAddCallback,
   });
   });
 
 
   @override
   @override
@@ -54,6 +59,7 @@ class UploadStepCard extends StatelessWidget {
               imageSrcList: ["", "", "", "", "", "", ""],
               imageSrcList: ["", "", "", "", "", "", ""],
               maxCount: 9,
               maxCount: 9,
               spacing: 8.0,
               spacing: 8.0,
+              onClickAddCallback: onClickAddCallback,
             ),
             ),
           ),
           ),
           SizedBox(height: 10.h),
           SizedBox(height: 10.h),