Parcourir la source

[feat]分析亲密度,报告预览页,没有档案时,隐藏亲密人信息布局,显示添加档案的布局

hezihao il y a 7 mois
Parent
commit
67e67367c3

BIN
assets/images/bg_intimacy_analyse_user_name.webp


BIN
assets/images/icon_default_avatar_unknown.webp


+ 1 - 0
assets/string/base/string.xml

@@ -336,6 +336,7 @@
     <string name="no_upload_conversation_image_tip">请上传聊天记录图片</string>
 
     <string name="intimacy_analyse_ing">分析中</string>
+    <string name="intimacy_analyse_add">添加</string>
 
     <string name="intimacy_interaction">互动好感度</string>
     <string name="intimacy_topic">话题好感度</string>

+ 99 - 11
lib/module/intimacy_analyse/analyse_report/intimacy_analyse_report_view.dart

@@ -80,6 +80,9 @@ class IntimacyAnalyseReportView
   /// 亲密档案
   Widget _buildIntimacyArchives() {
     return Obx(() {
+      // 是否要显示添加档案的布局
+      bool isNeedShowAddProfileLayout = !controller.isLogin || controller.currentKeyboardInfo.value == null;
+
       // 当前用户的头像
       String myAvatarUrl = controller.userInfo.value?.imageUrl ?? "";
       // 对方用户的头像
@@ -90,23 +93,108 @@ class IntimacyAnalyseReportView
       GenderType? taGender = GenderType.fromType(
         controller.currentKeyboardInfo.value?.gender,
       );
-      return IntimacyUserWidget(
-        width: 200.w,
-        height: 100.h,
-        avatarSize: 96.0,
-        myAvatar: myAvatarUrl,
-        taAvatar: taAvatarUrl,
-        myGender: myGender,
-        taGender: taGender,
-        avatarBorderWidth: 3.0,
-        loveSize: 42.w,
+
+      double layoutWidth = 185.w;
+      return Stack(
+        children: [
+          IntimacyUserWidget(
+            width: layoutWidth,
+            height: 100.h,
+            avatarSize: 96.0,
+            myAvatar: myAvatarUrl,
+            taAvatar: taAvatarUrl,
+            myGender: myGender,
+            taGender: taGender,
+            avatarBorderWidth: 3.0,
+            loveSize: 42.w,
+          ),
+          isNeedShowAddProfileLayout
+              ? SizedBox(
+                width: layoutWidth,
+                child: Row(
+                  mainAxisAlignment: MainAxisAlignment.spaceBetween,
+                  mainAxisSize: MainAxisSize.min,
+                  children: [
+                    // 自己
+                    Container(
+                      margin: EdgeInsets.only(left: 12.w, top: 83.h),
+                      child: _buildUserNameLabel(StringName.mySelf),
+                    ),
+                    // 添加
+                    Container(
+                      margin: EdgeInsets.only(right: 12.w, top: 83.h),
+                      child: _buildAddProfileLabel(
+                        StringName.intimacyAnalyseAdd,
+                      ),
+                    ),
+                  ],
+                ),
+              ): SizedBox.shrink(),
+        ],
       );
     });
   }
 
+  /// 用户名称标签
+  Widget _buildUserNameLabel(String name) {
+    return Container(
+      padding: EdgeInsets.only(left: 22.w, right: 22.w, top: 3.h, bottom: 8.h),
+      decoration: BoxDecoration(
+        image: DecorationImage(
+          image: Assets.images.bgIntimacyAnalyseUserName.provider(),
+          fit: BoxFit.fill,
+        ),
+      ),
+      child: Text(
+        name,
+        style: TextStyle(
+          color: ColorName.black80,
+          fontSize: 14.sp,
+          fontWeight: FontWeight.w400,
+        ),
+      ),
+    );
+  }
+
+  /// 添加档案的按钮
+  Widget _buildAddProfileLabel(String name) {
+    return GestureDetector(
+      onTap: () {
+        controller.jump2ProfilePage();
+      },
+      child: Container(
+        padding: EdgeInsets.only(
+          left: 22.w,
+          right: 22.w,
+          top: 3.h,
+          bottom: 8.h,
+        ),
+        decoration: BoxDecoration(
+          image: DecorationImage(
+            image: Assets.images.bgIntimacyAnalyseUserName.provider(),
+            fit: BoxFit.fill,
+          ),
+        ),
+        child: Text(
+          name,
+          style: TextStyle(
+            color: const Color(0xFF8651FF),
+            fontSize: 14.sp,
+            fontWeight: FontWeight.w500,
+          ),
+        ),
+      ),
+    );
+  }
+
   /// 亲密档案切换布局
   Widget _buildIntimacyArchivesSwitchLayout() {
     return Obx(() {
+      // 未登录,不显示
+      if (!controller.isLogin) {
+        return SizedBox.shrink();
+      }
+      String taName = controller.currentKeyboardInfo.value?.name ?? "";
       return GestureDetector(
         onTap: () {
           controller.clickIntimacyArchivesSwitch();
@@ -116,7 +204,7 @@ class IntimacyAnalyseReportView
           children: [
             Text(
               // 自己&对方的名称
-              "${StringName.mySelf}${StringName.andSymbol}${controller.currentKeyboardInfo.value?.name ?? ""}",
+              "${StringName.mySelf}${StringName.andSymbol}$taName",
               style: TextStyle(
                 color: ColorName.black80,
                 fontSize: 13.sp,

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

@@ -90,6 +90,15 @@ class IntimacyAnalyseReportController extends BaseController {
     AtmobLog.d(tag, "switchTaTest result:=> ${keyboardInfo?.toJson() ?? ""}");
   }
 
+  /// 跳转去档案页
+  void jump2ProfilePage() {
+    if (!isLogin) {
+      LoginDialog.show();
+      return;
+    }
+    ProfilePage.start();
+  }
+
   /// 解锁
   void clickUnlockBtn(BuildContext context) async {
     // 未登录,则跳转去登录

+ 4 - 2
lib/module/intimacy_analyse/widget/intimacy_user_widget.dart

@@ -86,12 +86,14 @@ class IntimacyUserWidget extends StatelessWidget {
   Widget _buildAvatarWithGender(String? imageUrl, GenderType? gender) {
     ImageProvider defaultImage;
     if (gender == GenderType.male) {
+      // 男
       defaultImage = Assets.images.iconDefaultAvatarMale.image().image;
     } else if (gender == GenderType.female) {
+      // 女
       defaultImage = Assets.images.iconDefaultAvatarFemale.image().image;
     } else {
-      // 默认值
-      defaultImage = Assets.images.iconDefaultAvatarFemale.image().image;
+      // 未设置
+      defaultImage = Assets.images.iconDefaultAvatarUnknown.image().image;
     }
     return _buildAvatar(imageUrl, defaultImage: defaultImage);
   }

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

@@ -141,6 +141,10 @@ class $AssetsImagesGen {
   AssetGenImage get bgIntimacyAnalyseUploadCard =>
       const AssetGenImage('assets/images/bg_intimacy_analyse_upload_card.webp');
 
+  /// File path: assets/images/bg_intimacy_analyse_user_name.webp
+  AssetGenImage get bgIntimacyAnalyseUserName =>
+      const AssetGenImage('assets/images/bg_intimacy_analyse_user_name.webp');
+
   /// File path: assets/images/bg_keyboard.webp
   AssetGenImage get bgKeyboard =>
       const AssetGenImage('assets/images/bg_keyboard.webp');
@@ -473,6 +477,10 @@ class $AssetsImagesGen {
   AssetGenImage get iconDefaultAvatarMale =>
       const AssetGenImage('assets/images/icon_default_avatar_male.webp');
 
+  /// File path: assets/images/icon_default_avatar_unknown.webp
+  AssetGenImage get iconDefaultAvatarUnknown =>
+      const AssetGenImage('assets/images/icon_default_avatar_unknown.webp');
+
   /// File path: assets/images/icon_dialog_close_black.webp
   AssetGenImage get iconDialogCloseBlack =>
       const AssetGenImage('assets/images/icon_dialog_close_black.webp');
@@ -1083,6 +1091,7 @@ class $AssetsImagesGen {
     bgIntimacyAnalyseReportPreviewBubble,
     bgIntimacyAnalyseReportPreviewMask,
     bgIntimacyAnalyseUploadCard,
+    bgIntimacyAnalyseUserName,
     bgKeyboard,
     bgKeyboardEasyReply,
     bgKeyboardIntimacyAnalyze,
@@ -1162,6 +1171,7 @@ class $AssetsImagesGen {
     iconDefaultAvatar,
     iconDefaultAvatarFemale,
     iconDefaultAvatarMale,
+    iconDefaultAvatarUnknown,
     iconDialogCloseBlack,
     iconDialogPayFail,
     iconDialogPayFailService,

+ 4 - 2
lib/resource/string.gen.dart

@@ -235,11 +235,12 @@ class StringName {
   static final String noChooseModeTip = 'no_choose_mode_tip'.tr; // 请选择模式
   static final String noUploadScreenshotTip = 'no_upload_screenshot_tip'.tr; // 请上传截图
   static final String noChooseIntimacyTaTip = 'no_choose_intimacy_ta_tip'.tr; // 请选择一个亲密档案
-  static final String noCreateIntimacyTaTip = 'no_create_intimacy_ta_tip'.tr; // 请创建一个亲密档案
+  static final String noCreateIntimacyTaTip = 'no_create_intimacy_ta_tip'.tr; // 需要添加对方档案才能分析
   static final String noChoosePredictionDirectionTip = 'no_choose_prediction_direction_tip'.tr; // 请选择预测方向
   static final String noChooseAiModelTip = 'no_choose_ai_model_tip'.tr; // 请选择AI模型
   static final String noUploadConversationImageTip = 'no_upload_conversation_image_tip'.tr; // 请上传聊天记录图片
   static final String intimacyAnalyseIng = 'intimacy_analyse_ing'.tr; // 分析中
+  static final String intimacyAnalyseAdd = 'intimacy_analyse_add'.tr; // 添加
   static final String intimacyInteraction = 'intimacy_interaction'.tr; // 互动好感度
   static final String intimacyTopic = 'intimacy_topic'.tr; // 话题好感度
   static final String intimacyRespond = 'intimacy_respond'.tr; // 情绪回应
@@ -524,11 +525,12 @@ class StringMultiSource {
       'no_choose_mode_tip': '请选择模式',
       'no_upload_screenshot_tip': '请上传截图',
       'no_choose_intimacy_ta_tip': '请选择一个亲密档案',
-      'no_create_intimacy_ta_tip': '请创建一个亲密档案',
+      'no_create_intimacy_ta_tip': '需要添加对方档案才能分析',
       'no_choose_prediction_direction_tip': '请选择预测方向',
       'no_choose_ai_model_tip': '请选择AI模型',
       'no_upload_conversation_image_tip': '请上传聊天记录图片',
       'intimacy_analyse_ing': '分析中',
+      'intimacy_analyse_add': '添加',
       'intimacy_interaction': '互动好感度',
       'intimacy_topic': '话题好感度',
       'intimacy_respond': '情绪回应',