Browse Source

[feat]亲密度分析,增加分析亲密度接口Api

hezihao 7 months ago
parent
commit
688f31fefa

BIN
assets/images/icon_direction_result.webp


+ 8 - 1
lib/data/api/atmob_api.dart

@@ -13,6 +13,7 @@ import 'package:keyboard/data/api/request/chat_super_reply_request.dart';
 import 'package:keyboard/data/api/request/chat_super_speak_request.dart';
 import 'package:keyboard/data/api/request/chat_super_speak_request.dart';
 import 'package:keyboard/data/api/request/complaint_submit_request.dart';
 import 'package:keyboard/data/api/request/complaint_submit_request.dart';
 import 'package:keyboard/data/api/request/config_request.dart';
 import 'package:keyboard/data/api/request/config_request.dart';
+import 'package:keyboard/data/api/request/intimacy_analyze_request.dart';
 import 'package:keyboard/data/api/request/keyboard_character_list_request.dart';
 import 'package:keyboard/data/api/request/keyboard_character_list_request.dart';
 import 'package:keyboard/data/api/request/keyboard_character_update_request.dart';
 import 'package:keyboard/data/api/request/keyboard_character_update_request.dart';
 import 'package:keyboard/data/api/request/keyboard_choose_request.dart';
 import 'package:keyboard/data/api/request/keyboard_choose_request.dart';
@@ -37,6 +38,7 @@ import 'package:keyboard/data/api/response/chat_super_reply_response.dart';
 import 'package:keyboard/data/api/response/chat_super_speak_response.dart';
 import 'package:keyboard/data/api/response/chat_super_speak_response.dart';
 import 'package:keyboard/data/api/response/config_response.dart';
 import 'package:keyboard/data/api/response/config_response.dart';
 import 'package:keyboard/data/api/response/intimacy_analyze_config_response.dart';
 import 'package:keyboard/data/api/response/intimacy_analyze_config_response.dart';
+import 'package:keyboard/data/api/response/intimacy_analyze_response.dart';
 import 'package:keyboard/data/api/response/item_list_response.dart';
 import 'package:keyboard/data/api/response/item_list_response.dart';
 import 'package:keyboard/data/api/response/item_retention_response.dart';
 import 'package:keyboard/data/api/response/item_retention_response.dart';
 import 'package:keyboard/data/api/response/keyboard_character_list_response.dart';
 import 'package:keyboard/data/api/response/keyboard_character_list_response.dart';
@@ -77,7 +79,6 @@ abstract class AtmobApi {
   @POST("/central/open/v1/user/deprecate")
   @POST("/central/open/v1/user/deprecate")
   Future<BaseResponse> deprecate(@Body() AppBaseRequest request);
   Future<BaseResponse> deprecate(@Body() AppBaseRequest request);
 
 
-
   // 意见反馈
   // 意见反馈
   @POST("/project/keyboard/v1/complaint/submit")
   @POST("/project/keyboard/v1/complaint/submit")
   Future<BaseResponse> complaintSubmit(@Body() ComplaintSubmitRequest request);
   Future<BaseResponse> complaintSubmit(@Body() ComplaintSubmitRequest request);
@@ -259,4 +260,10 @@ abstract class AtmobApi {
   Future<BaseResponse<IntimacyAnalyzeConfigResponse>> getIntimacyAnalyzeConfig(
   Future<BaseResponse<IntimacyAnalyzeConfigResponse>> getIntimacyAnalyzeConfig(
     @Body() AppBaseRequest request,
     @Body() AppBaseRequest request,
   );
   );
+
+  /// 分析亲密度
+  @POST("/project/keyboard/v1/intimacy/analyze")
+  Future<BaseResponse<IntimacyAnalyzeResponse>> getIntimacyAnalyze(
+    @Body() IntimacyAnalyzeRequest request,
+  );
 }
 }

+ 34 - 0
lib/data/api/atmob_api.g.dart

@@ -1203,6 +1203,40 @@ class _AtmobApi implements AtmobApi {
     return _value;
     return _value;
   }
   }
 
 
+  @override
+  Future<BaseResponse<IntimacyAnalyzeResponse>> getIntimacyAnalyze(
+    IntimacyAnalyzeRequest request,
+  ) async {
+    final _extra = <String, dynamic>{};
+    final queryParameters = <String, dynamic>{};
+    final _headers = <String, dynamic>{};
+    final _data = <String, dynamic>{};
+    _data.addAll(request.toJson());
+    final _options = _setStreamType<BaseResponse<IntimacyAnalyzeResponse>>(
+      Options(method: 'POST', headers: _headers, extra: _extra)
+          .compose(
+            _dio.options,
+            '/project/keyboard/v1/intimacy/analyze',
+            queryParameters: queryParameters,
+            data: _data,
+          )
+          .copyWith(baseUrl: _combineBaseUrls(_dio.options.baseUrl, baseUrl)),
+    );
+    final _result = await _dio.fetch<Map<String, dynamic>>(_options);
+    late BaseResponse<IntimacyAnalyzeResponse> _value;
+    try {
+      _value = BaseResponse<IntimacyAnalyzeResponse>.fromJson(
+        _result.data!,
+        (json) =>
+            IntimacyAnalyzeResponse.fromJson(json as Map<String, dynamic>),
+      );
+    } on Object catch (e, s) {
+      errorLogger?.logError(e, s, _options);
+      rethrow;
+    }
+    return _value;
+  }
+
   RequestOptions _setStreamType<T>(RequestOptions requestOptions) {
   RequestOptions _setStreamType<T>(RequestOptions requestOptions) {
     if (T != dynamic &&
     if (T != dynamic &&
         !(requestOptions.responseType == ResponseType.bytes ||
         !(requestOptions.responseType == ResponseType.bytes ||

+ 35 - 0
lib/data/api/request/intimacy_analyze_request.dart

@@ -0,0 +1,35 @@
+import 'package:json_annotation/json_annotation.dart';
+
+import '../../../base/app_base_request.dart';
+
+part 'intimacy_analyze_request.g.dart';
+
+/// 分析亲密度的请求
+@JsonSerializable()
+class IntimacyAnalyzeRequest extends AppBaseRequest {
+  /// 图片地址列表,不加cdn前缀
+  @JsonKey(name: "imageList")
+  List<String> imageList;
+
+  /// 键盘id
+  @JsonKey(name: "keyboardId")
+  String keyboardId;
+
+  /// 预测方向
+  @JsonKey(name: "direction")
+  String direction;
+
+  /// 模式
+  @JsonKey(name: "mode")
+  String mode;
+
+  IntimacyAnalyzeRequest(
+    this.imageList,
+    this.keyboardId,
+    this.direction,
+    this.mode,
+  );
+
+  @override
+  Map<String, dynamic> toJson() => _$IntimacyAnalyzeRequestToJson(this);
+}

+ 78 - 0
lib/data/api/request/intimacy_analyze_request.g.dart

@@ -0,0 +1,78 @@
+// GENERATED CODE - DO NOT MODIFY BY HAND
+
+part of 'intimacy_analyze_request.dart';
+
+// **************************************************************************
+// JsonSerializableGenerator
+// **************************************************************************
+
+IntimacyAnalyzeRequest _$IntimacyAnalyzeRequestFromJson(
+  Map<String, dynamic> json,
+) =>
+    IntimacyAnalyzeRequest(
+        (json['imageList'] as List<dynamic>).map((e) => e as String).toList(),
+        json['keyboardId'] as String,
+        json['direction'] as String,
+        json['mode'] as String,
+      )
+      ..appPlatform = (json['appPlatform'] as num).toInt()
+      ..os = json['os'] as String
+      ..osVersion = json['osVersion'] as String
+      ..packageName = json['packageName'] as String?
+      ..appVersionName = json['appVersionName'] as String?
+      ..appVersionCode = (json['appVersionCode'] as num?)?.toInt()
+      ..channelName = json['channelName'] as String?
+      ..appId = (json['appId'] as num?)?.toInt()
+      ..tgPlatform = (json['tgPlatform'] as num?)?.toInt()
+      ..oaid = json['oaid'] as String?
+      ..aaid = json['aaid'] as String?
+      ..androidId = json['androidId'] as String?
+      ..imei = json['imei'] as String?
+      ..simImei0 = json['simImei0'] as String?
+      ..simImei1 = json['simImei1'] as String?
+      ..mac = json['mac'] as String?
+      ..idfa = json['idfa'] as String?
+      ..idfv = json['idfv'] as String?
+      ..machineId = json['machineId'] as String?
+      ..brand = json['brand'] as String?
+      ..model = json['model'] as String?
+      ..wifiName = json['wifiName'] as String?
+      ..region = json['region'] as String?
+      ..locLng = (json['locLng'] as num?)?.toDouble()
+      ..locLat = (json['locLat'] as num?)?.toDouble()
+      ..authToken = json['authToken'] as String?;
+
+Map<String, dynamic> _$IntimacyAnalyzeRequestToJson(
+  IntimacyAnalyzeRequest instance,
+) => <String, dynamic>{
+  'appPlatform': instance.appPlatform,
+  'os': instance.os,
+  'osVersion': instance.osVersion,
+  'packageName': instance.packageName,
+  'appVersionName': instance.appVersionName,
+  'appVersionCode': instance.appVersionCode,
+  'channelName': instance.channelName,
+  'appId': instance.appId,
+  'tgPlatform': instance.tgPlatform,
+  'oaid': instance.oaid,
+  'aaid': instance.aaid,
+  'androidId': instance.androidId,
+  'imei': instance.imei,
+  'simImei0': instance.simImei0,
+  'simImei1': instance.simImei1,
+  'mac': instance.mac,
+  'idfa': instance.idfa,
+  'idfv': instance.idfv,
+  'machineId': instance.machineId,
+  'brand': instance.brand,
+  'model': instance.model,
+  'wifiName': instance.wifiName,
+  'region': instance.region,
+  'locLng': instance.locLng,
+  'locLat': instance.locLat,
+  'authToken': instance.authToken,
+  'imageList': instance.imageList,
+  'keyboardId': instance.keyboardId,
+  'direction': instance.direction,
+  'mode': instance.mode,
+};

+ 58 - 0
lib/data/api/response/intimacy_analyze_response.dart

@@ -0,0 +1,58 @@
+import 'package:json_annotation/json_annotation.dart';
+
+part 'intimacy_analyze_response.g.dart';
+
+/// 分析亲密度的响应
+@JsonSerializable()
+class IntimacyAnalyzeResponse {
+  /// 情感亲密度
+  @JsonKey(name: "emotion")
+  String? emotion;
+
+  /// 亲密度阶段
+  @JsonKey(name: "intimacyPhase")
+  String? intimacyPhase;
+
+  /// 互动好感度
+  @JsonKey(name: "interaction")
+  String? interaction;
+
+  /// 话题情感浓度
+  @JsonKey(name: "topic")
+  String? topic;
+
+  /// 情绪回应
+  @JsonKey(name: "respond")
+  String? respond;
+
+  /// 亲密词占比
+  @JsonKey(name: "intimacyRatio")
+  String? intimacyRatio;
+
+  /// 预测方向
+  @JsonKey(name: "direction")
+  String? direction;
+
+  /// 情感需求
+  @JsonKey(name: "need")
+  String? need;
+
+  /// 短期聊天策略
+  @JsonKey(name: "shortChat")
+  String? shortChat;
+
+  /// 长期聊天策略
+  @JsonKey(name: "longChat")
+  String? longChat;
+
+  /// 总结
+  @JsonKey(name: "summary")
+  String? summary;
+
+  IntimacyAnalyzeResponse(this.emotion, this.intimacyPhase, this.interaction,
+      this.topic, this.respond, this.intimacyRatio, this.direction, this.need,
+      this.shortChat, this.longChat, this.summary);
+
+  factory IntimacyAnalyzeResponse.fromJson(Map<String, dynamic> json) =>
+      _$IntimacyAnalyzeResponseFromJson(json);
+}

+ 39 - 0
lib/data/api/response/intimacy_analyze_response.g.dart

@@ -0,0 +1,39 @@
+// GENERATED CODE - DO NOT MODIFY BY HAND
+
+part of 'intimacy_analyze_response.dart';
+
+// **************************************************************************
+// JsonSerializableGenerator
+// **************************************************************************
+
+IntimacyAnalyzeResponse _$IntimacyAnalyzeResponseFromJson(
+  Map<String, dynamic> json,
+) => IntimacyAnalyzeResponse(
+  json['emotion'] as String?,
+  json['intimacyPhase'] as String?,
+  json['interaction'] as String?,
+  json['topic'] as String?,
+  json['respond'] as String?,
+  json['intimacyRatio'] as String?,
+  json['direction'] as String?,
+  json['need'] as String?,
+  json['shortChat'] as String?,
+  json['longChat'] as String?,
+  json['summary'] as String?,
+);
+
+Map<String, dynamic> _$IntimacyAnalyzeResponseToJson(
+  IntimacyAnalyzeResponse instance,
+) => <String, dynamic>{
+  'emotion': instance.emotion,
+  'intimacyPhase': instance.intimacyPhase,
+  'interaction': instance.interaction,
+  'topic': instance.topic,
+  'respond': instance.respond,
+  'intimacyRatio': instance.intimacyRatio,
+  'direction': instance.direction,
+  'need': instance.need,
+  'shortChat': instance.shortChat,
+  'longChat': instance.longChat,
+  'summary': instance.summary,
+};

+ 5 - 0
lib/data/bean/upload_info.dart

@@ -33,12 +33,17 @@ class UploadInfo {
   @JsonKey(name: "fileUrlCdnPrefix")
   @JsonKey(name: "fileUrlCdnPrefix")
   String? fileUrlCdnPrefix;
   String? fileUrlCdnPrefix;
 
 
+  /// 后端需要用的路径,不包含cdn前缀
+  @JsonKey(name: "fileBackendPath")
+  String? fileBackendPath;
+
   UploadInfo({
   UploadInfo({
     this.id,
     this.id,
     this.fileName,
     this.fileName,
     this.filePath,
     this.filePath,
     this.uploadSceneType,
     this.uploadSceneType,
     this.uploadState,
     this.uploadState,
+    this.fileBackendPath,
   });
   });
 
 
   Map<String, dynamic> toJson() => _$UploadInfoToJson(this);
   Map<String, dynamic> toJson() => _$UploadInfoToJson(this);

+ 2 - 0
lib/data/bean/upload_info.g.dart

@@ -13,6 +13,7 @@ UploadInfo _$UploadInfoFromJson(Map<String, dynamic> json) =>
         filePath: json['filePath'] as String?,
         filePath: json['filePath'] as String?,
         uploadSceneType: json['uploadSceneType'] as String?,
         uploadSceneType: json['uploadSceneType'] as String?,
         uploadState: json['uploadState'] as String?,
         uploadState: json['uploadState'] as String?,
+        fileBackendPath: json['fileBackendPath'] as String?,
       )
       )
       ..fileUrl = json['fileUrl'] as String?
       ..fileUrl = json['fileUrl'] as String?
       ..fileUrlCdnPrefix = json['fileUrlCdnPrefix'] as String?;
       ..fileUrlCdnPrefix = json['fileUrlCdnPrefix'] as String?;
@@ -26,4 +27,5 @@ Map<String, dynamic> _$UploadInfoToJson(UploadInfo instance) =>
       'uploadState': instance.uploadState,
       'uploadState': instance.uploadState,
       'fileUrl': instance.fileUrl,
       'fileUrl': instance.fileUrl,
       'fileUrlCdnPrefix': instance.fileUrlCdnPrefix,
       'fileUrlCdnPrefix': instance.fileUrlCdnPrefix,
+      'fileBackendPath': instance.fileBackendPath,
     };
     };

+ 16 - 3
lib/data/repository/intimacy_analyze_repository.dart

@@ -9,7 +9,9 @@ import '../../utils/async_util.dart';
 import '../../utils/atmob_log.dart';
 import '../../utils/atmob_log.dart';
 import '../../utils/http_handler.dart';
 import '../../utils/http_handler.dart';
 import '../api/atmob_api.dart';
 import '../api/atmob_api.dart';
+import '../api/request/intimacy_analyze_request.dart';
 import '../api/response/intimacy_analyze_config_response.dart';
 import '../api/response/intimacy_analyze_config_response.dart';
+import '../api/response/intimacy_analyze_response.dart';
 
 
 /// 亲密度分析Repository层
 /// 亲密度分析Repository层
 @LazySingleton()
 @LazySingleton()
@@ -19,7 +21,8 @@ class IntimacyAnalyzeRepository {
   final AtmobApi atmobApi;
   final AtmobApi atmobApi;
 
 
   /// 亲密度配置
   /// 亲密度配置
-  Rxn<IntimacyAnalyzeConfigResponse> intimacyAnalyzeConfig = Rxn<IntimacyAnalyzeConfigResponse>();
+  Rxn<IntimacyAnalyzeConfigResponse> intimacyAnalyzeConfig =
+      Rxn<IntimacyAnalyzeConfigResponse>();
 
 
   IntimacyAnalyzeRepository(this.atmobApi) {
   IntimacyAnalyzeRepository(this.atmobApi) {
     AtmobLog.d(tag, '$tag...init');
     AtmobLog.d(tag, '$tag...init');
@@ -34,8 +37,11 @@ class IntimacyAnalyzeRepository {
 
 
   /// 刷新亲密度配置
   /// 刷新亲密度配置
   void refreshIntimacyAnalyzeConfig() {
   void refreshIntimacyAnalyzeConfig() {
-    AsyncUtil.retry(() => requestIntimacyAnalyzeConfig(), Duration(seconds: 3),
-      maxRetry: 100,).then((IntimacyAnalyzeConfigResponse configResponse) {
+    AsyncUtil.retry(
+      () => requestIntimacyAnalyzeConfig(),
+      Duration(seconds: 3),
+      maxRetry: 100,
+    ).then((IntimacyAnalyzeConfigResponse configResponse) {
       AtmobLog.d(tag, "获取亲密度配置成功: ${configResponse.toJson()}");
       AtmobLog.d(tag, "获取亲密度配置成功: ${configResponse.toJson()}");
       intimacyAnalyzeConfig.value = configResponse;
       intimacyAnalyzeConfig.value = configResponse;
     });
     });
@@ -47,4 +53,11 @@ class IntimacyAnalyzeRepository {
         .getIntimacyAnalyzeConfig(AppBaseRequest())
         .getIntimacyAnalyzeConfig(AppBaseRequest())
         .then(HttpHandler.handle(true));
         .then(HttpHandler.handle(true));
   }
   }
+
+  /// 分析亲密度
+  Future<IntimacyAnalyzeResponse> getIntimacyAnalyze(
+    IntimacyAnalyzeRequest request,
+  ) {
+    return atmobApi.getIntimacyAnalyze(request).then(HttpHandler.handle(true));
+  }
 }
 }

+ 31 - 0
lib/module/intimacy_analyse/intimacy_analyse_upload/intimacy_analyse_upload_controller.dart

@@ -4,10 +4,12 @@ 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';
+import 'package:keyboard/data/api/request/intimacy_analyze_request.dart';
 import 'package:keyboard/data/bean/upload_info.dart';
 import 'package:keyboard/data/bean/upload_info.dart';
 import 'package:keyboard/utils/upload/upload_scene_type.dart';
 import 'package:keyboard/utils/upload/upload_scene_type.dart';
 import 'package:wechat_assets_picker/wechat_assets_picker.dart';
 import 'package:wechat_assets_picker/wechat_assets_picker.dart';
 import '../../../data/api/response/intimacy_analyze_config_response.dart';
 import '../../../data/api/response/intimacy_analyze_config_response.dart';
+import '../../../data/bean/keyboard_info.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 '../../../data/repository/intimacy_analyze_repository.dart';
 import '../../../data/repository/intimacy_analyze_repository.dart';
@@ -16,6 +18,7 @@ import '../../../utils/atmob_log.dart';
 import '../../../utils/image_picker_util.dart';
 import '../../../utils/image_picker_util.dart';
 import '../../../utils/intimacy_analyze_config_helper.dart';
 import '../../../utils/intimacy_analyze_config_helper.dart';
 import '../../../utils/upload/upload_file_manager.dart';
 import '../../../utils/upload/upload_file_manager.dart';
+import '../../profile/profile_page.dart';
 
 
 /// 亲密度分析上传页Controller
 /// 亲密度分析上传页Controller
 @injectable
 @injectable
@@ -84,6 +87,9 @@ class IntimacyAnalyseUploadController extends BaseController {
   /// 报告是否已解锁
   /// 报告是否已解锁
   Rx<bool> isReportUnlock = true.obs;
   Rx<bool> isReportUnlock = true.obs;
 
 
+  /// 当前键盘信息
+  Rxn<KeyboardInfo> currentKeyboardInfo = Rxn();
+
   IntimacyAnalyseUploadController(
   IntimacyAnalyseUploadController(
     this.intimacyAnalyzeRepository,
     this.intimacyAnalyzeRepository,
     this.intimacyAnalyzeConfigHelper,
     this.intimacyAnalyzeConfigHelper,
@@ -261,6 +267,31 @@ class IntimacyAnalyseUploadController extends BaseController {
   /// 点击了下一步按钮
   /// 点击了下一步按钮
   void clickNextBtn() {
   void clickNextBtn() {
     // TODO hezihao,需要判断是否解锁,未解锁弹出购买弹窗,目前先直接让通过
     // TODO hezihao,需要判断是否解锁,未解锁弹出购买弹窗,目前先直接让通过
+
+    // 上传的图片后端地址
+    List<String> imageList =
+        uploadInfoList.map((item) {
+          return item.fileBackendPath ?? "";
+        }).toList();
+    // 键盘Id
+    String keyboardId = currentKeyboardInfo.value?.id ?? "";
+    // 预测方向
+    // TODO hezihao,多个预测方向,用逗号分割,还是?
+    String direction = "缘分指数";
+    // 当前选择的Ai模型
+    String aiModel = currentAiModel.value;
+
+    intimacyAnalyzeRepository.getIntimacyAnalyze(
+      IntimacyAnalyzeRequest(imageList, keyboardId, direction, aiModel),
+    );
     isUploadPage.value = false;
     isUploadPage.value = false;
   }
   }
+
+  /// 换Ta测测
+  void switchTaTest() async {
+    // 跳转到档案选择页,获取当前的键盘Id
+    KeyboardInfo? keyboardInfo = await ProfilePage.start() as KeyboardInfo?;
+    AtmobLog.d(tag, "switchTaTest result:=> ${keyboardInfo?.toJson() ?? ""}");
+    currentKeyboardInfo.value = keyboardInfo;
+  }
 }
 }

+ 23 - 15
lib/module/intimacy_analyse/intimacy_analyse_upload/intimacy_analyse_upload_page.dart

@@ -229,7 +229,7 @@ class IntimacyAnalyseUploadPage
             Container(
             Container(
               constraints: BoxConstraints(
               constraints: BoxConstraints(
                 // 最小高度
                 // 最小高度
-                minHeight: 212.h,
+                minHeight: 90.h,
               ),
               ),
               margin: EdgeInsets.only(left: 12.w, right: 12.w),
               margin: EdgeInsets.only(left: 12.w, right: 12.w),
               padding: EdgeInsets.only(
               padding: EdgeInsets.only(
@@ -312,7 +312,10 @@ class IntimacyAnalyseUploadPage
                 Row(
                 Row(
                   children: [
                   children: [
                     // 图标
                     // 图标
-                    CachedNetworkImage(imageUrl: "", height: 14.w, width: 14.w),
+                    Assets.images.iconDirectionResult.image(
+                      height: 14.w,
+                      width: 14.w,
+                    ),
                     SizedBox(width: 2.w),
                     SizedBox(width: 2.w),
                     // 结果文字
                     // 结果文字
                     Text(
                     Text(
@@ -540,19 +543,24 @@ class IntimacyAnalyseUploadPage
             ],
             ],
           ),
           ),
           // 切换按钮
           // 切换按钮
-          Container(
-            padding: EdgeInsets.symmetric(horizontal: 9.w, vertical: 6.h),
-            margin: EdgeInsets.only(right: 8.w, top: 8.h, bottom: 8.h),
-            decoration: BoxDecoration(
-              color: ColorName.white,
-              borderRadius: BorderRadius.circular(22.r),
-            ),
-            child: Text(
-              StringName.intimacyAnalyseSwitchTaTest,
-              style: TextStyle(
-                color: ColorName.black80,
-                fontSize: 12.sp,
-                fontWeight: FontWeight.w400,
+          GestureDetector(
+            onTap: () {
+              controller.switchTaTest();
+            },
+            child: Container(
+              padding: EdgeInsets.symmetric(horizontal: 9.w, vertical: 6.h),
+              margin: EdgeInsets.only(right: 8.w, top: 8.h, bottom: 8.h),
+              decoration: BoxDecoration(
+                color: ColorName.white,
+                borderRadius: BorderRadius.circular(22.r),
+              ),
+              child: Text(
+                StringName.intimacyAnalyseSwitchTaTest,
+                style: TextStyle(
+                  color: ColorName.black80,
+                  fontSize: 12.sp,
+                  fontWeight: FontWeight.w400,
+                ),
               ),
               ),
             ),
             ),
           ),
           ),

+ 1 - 1
lib/module/profile/profile_controller.dart

@@ -72,7 +72,7 @@ class ProfileController extends BaseController {
   }
   }
 
 
   clickBack() {
   clickBack() {
-    Get.back();
+    Get.back(result: _currentCustomKeyboardInfo.value);
   }
   }
 
 
   clickAddButton() async {
   clickAddButton() async {

+ 2 - 2
lib/module/profile/profile_page.dart

@@ -18,8 +18,8 @@ import '../../widget/avatar/avatar_image_widget.dart';
 class ProfilePage extends BasePage<ProfileController> {
 class ProfilePage extends BasePage<ProfileController> {
   const ProfilePage({super.key});
   const ProfilePage({super.key});
 
 
-  static start() {
-    Get.toNamed(RoutePath.profile);
+  static Future<dynamic> start() async {
+    return await Get.toNamed(RoutePath.profile);
   }
   }
 
 
   @override
   @override

+ 5 - 0
lib/resource/assets.gen.dart

@@ -453,6 +453,10 @@ class $AssetsImagesGen {
   AssetGenImage get iconDialogPaySuccess =>
   AssetGenImage get iconDialogPaySuccess =>
       const AssetGenImage('assets/images/icon_dialog_pay_success.webp');
       const AssetGenImage('assets/images/icon_dialog_pay_success.webp');
 
 
+  /// File path: assets/images/icon_direction_result.webp
+  AssetGenImage get iconDirectionResult =>
+      const AssetGenImage('assets/images/icon_direction_result.webp');
+
   /// File path: assets/images/icon_discount_box_title.webp
   /// File path: assets/images/icon_discount_box_title.webp
   AssetGenImage get iconDiscountBoxTitle =>
   AssetGenImage get iconDiscountBoxTitle =>
       const AssetGenImage('assets/images/icon_discount_box_title.webp');
       const AssetGenImage('assets/images/icon_discount_box_title.webp');
@@ -1063,6 +1067,7 @@ class $AssetsImagesGen {
     iconDialogPayFail,
     iconDialogPayFail,
     iconDialogPayFailService,
     iconDialogPayFailService,
     iconDialogPaySuccess,
     iconDialogPaySuccess,
+    iconDirectionResult,
     iconDiscountBoxTitle,
     iconDiscountBoxTitle,
     iconDiscountCharacter,
     iconDiscountCharacter,
     iconDiscountChat,
     iconDiscountChat,

+ 4 - 2
lib/utils/upload/upload_file_manager.dart

@@ -96,9 +96,11 @@ class UploadFileManager {
             _tag,
             _tag,
             "上传文件成功 => 访问地址:${result.cdnPrefix}${result.filePath}",
             "上传文件成功 => 访问地址:${result.cdnPrefix}${result.filePath}",
           );
           );
-          // 设置远程访问Url和Cdn前缀
-          uploadInfo.fileUrl = "${result.cdnPrefix}${result.filePath}";
+          // 设置Cdn前缀和后端文件地址
           uploadInfo.fileUrlCdnPrefix = result.cdnPrefix;
           uploadInfo.fileUrlCdnPrefix = result.cdnPrefix;
+          uploadInfo.fileBackendPath = result.filePath;
+          // 拼接远程访问Url
+          uploadInfo.fileUrl = "${result.cdnPrefix}${result.filePath}";
           // 上传成功,更新状态为成功
           // 上传成功,更新状态为成功
           uploadInfo.uploadState = UploadState.success.name;
           uploadInfo.uploadState = UploadState.success.name;
           if (onUploadInfoUpdateCallback != null) {
           if (onUploadInfoUpdateCallback != null) {