Explorar o código

[feat]1.修改权限弹窗逻辑
2.调整人设页的tab
3.首页爆款玩法模块改成用图片
4.增加人设列表定制时间
5.CharacterInfo增加createTime字段

云天逵 hai 7 meses
pai
achega
a07ef2b75f

BIN=BIN
assets/images/bg_keyboard_easy_reply.webp


BIN=BIN
assets/images/bg_keyboard_intimacy_analyze.webp


BIN=BIN
assets/images/bg_keyboard_screenshot_reply.webp


BIN=BIN
assets/images/icon_keyboard_initmacy_title.webp


BIN=BIN
assets/images/icon_keyboard_intimacy_logo.webp


BIN=BIN
assets/images/icon_keyboard_screenshot_logo.webp


BIN=BIN
assets/images/icon_keyboard_screenshot_title.webp


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

@@ -242,8 +242,7 @@
 
 
     <string name="keyboard_member_open">开通会员</string>
-    <string name="keyboard_intimacy_subtitle">探索人格/情感特质</string>
-    <string name="keyboard_screenshot_subtitle">上下文语义分析</string>
+
     <string name="keyboard_go_to_manage">去管理</string>
     <string name="keyboard_add">添加</string>
     <string name="keyboard_no_login">自己</string>

+ 4 - 0
lib/data/bean/character_info.dart

@@ -50,6 +50,9 @@ class CharacterInfo {
   @JsonKey(name: "gender")
   int? gender;
 
+  @JsonKey(name: "createTime")
+  String? createTime;
+
   CharacterInfo({
     this.id,
     this.name,
@@ -63,6 +66,7 @@ class CharacterInfo {
     this.characters,
     this.birthday,
     this.gender,
+    this.createTime,
   });
 
   factory CharacterInfo.fromJson(Map<String, dynamic> json) =>

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

@@ -24,6 +24,7 @@ CharacterInfo _$CharacterInfoFromJson(Map<String, dynamic> json) =>
               .toList(),
       birthday: json['birthday'] as String?,
       gender: (json['gender'] as num?)?.toInt(),
+      createTime: json['createTime'] as String?,
     );
 
 Map<String, dynamic> _$CharacterInfoToJson(CharacterInfo instance) =>
@@ -40,4 +41,5 @@ Map<String, dynamic> _$CharacterInfoToJson(CharacterInfo instance) =>
       'characters': instance.characters,
       'birthday': instance.birthday,
       'gender': instance.gender,
+      'createTime': instance.createTime,
     };

+ 18 - 19
lib/dialog/permission_dialog.dart

@@ -11,19 +11,19 @@ import '../utils/styles.dart';
 
 class PermissionDialog {
   static Future<bool> showRequestDialog(
-    String titleTxt,
-    Widget desc,
-    String sureTxt,
-    String permissionDesc, {
-    Future<bool> Function()? sureClick,
+      String titleTxt,
+      Widget desc,
+      String sureTxt,
+      String permissionDesc, {
+        Future<bool> Function()? sureClick,
 
-  }) async {
+      }) async {
     const tag = 'PermissionDialog';
     final completer = Completer<bool>();
 
     SmartDialog.show(
       tag: tag,
-      alignment: const Alignment(0, 0),
+      alignment: Alignment.center,
       builder: (_) {
         return Container(
           width: 300.w,
@@ -53,35 +53,31 @@ class PermissionDialog {
                       GestureDetector(
                         onTap: () async {
                           if (sureClick != null) {
-                            // 显示权限说明
                             Get.snackbar(
                               '权限请求',
                               permissionDesc,
-                              animationDuration: Duration(milliseconds: 0),
                               snackPosition: SnackPosition.TOP,
                               backgroundColor: Colors.black.withOpacity(0.8),
                               colorText: Colors.white,
                               duration: null,
+                              animationDuration: Duration(milliseconds: 0),
                             );
-                            // 权限请求逻辑
+
                             bool shouldDismiss = await sureClick();
 
                             Get.closeAllSnackbars();
 
                             if (shouldDismiss) {
                               SmartDialog.dismiss(tag: tag);
-                              completer.complete(true);
-                            } else {
-                              // 保持弹窗,等待用户操作
-                              completer.complete(false);
+                              if (!completer.isCompleted) {
+                                completer.complete(true);
+                              }
                             }
-                          } else {
-                            SmartDialog.dismiss(tag: tag);
-                            completer.complete(true);
                           }
                         },
                         child: Container(
-                          decoration: Styles.getActivateButtonDecoration(50.r),
+                          decoration:
+                          Styles.getActivateButtonDecoration(50.r),
                           width: 130.w,
                           height: 40.w,
                           child: Center(
@@ -106,7 +102,9 @@ class PermissionDialog {
                 child: GestureDetector(
                   onTap: () {
                     SmartDialog.dismiss(tag: tag);
-                    completer.complete(false); // 用户主动关闭
+                    if (!completer.isCompleted) {
+                      completer.complete(false);
+                    }
                   },
                   child: Assets.images.iconCustomDialogClose.image(
                     width: 24.w,
@@ -123,6 +121,7 @@ class PermissionDialog {
     return completer.future;
   }
 
+
   static Widget buildStorageView() {
     return RichText(
       textAlign: TextAlign.center,

+ 2 - 2
lib/module/character/character_view.dart

@@ -278,10 +278,10 @@ class CharacterView extends BaseView<CharacterController> {
           return Column(
             children: [
               Container(
-                width: 80.w,
+
                 height: isSelected ? 38.h : 32.h,
                 padding:
-                    isSelected ? EdgeInsets.only(bottom: 4.h) : EdgeInsets.zero,
+                    isSelected ? EdgeInsets.only(bottom: 4.h,left: 15.w,right: 15.w) :EdgeInsets.only(left: 15.w,right: 15.w),
                 decoration:
                     isSelected
                         ? BoxDecoration(

+ 1 - 1
lib/module/character_custom/list/character_custom_list_page.dart

@@ -261,7 +261,7 @@ class CharacterCustomListPage extends BasePage<CharacterCustomListController> {
             ],
           ),
           Text(
-            characterInfo.description ?? "",
+            characterInfo.createTime ?? "",
             softWrap: true,
             style: TextStyle(
               color: Colors.black.withAlpha(153),

+ 7 - 88
lib/module/keyboard/keyboard_view.dart

@@ -459,53 +459,22 @@ class KeyBoardView extends BaseView<KeyBoardController> {
               GestureDetector(
                 onTap: controller.clickEasyReply,
                 child: Container(
-                  width: 166.w,
-                  height: 155.11.w,
-                  decoration: BoxDecoration(
-                    boxShadow: [
-                      BoxShadow(
-                        color: Colors.black.withValues(alpha: 0.10),
-                        offset: Offset(0, 6),
-                        blurRadius: 20,
-                        spreadRadius: 0,
-                      ),
-                    ],
-                  ),
+                  width: 170.w,
+                  height: 155.85.w,
                   child: Assets.images.bgKeyboardEasyReply.image(
                     fit: BoxFit.contain,
                   ),
                 ),
               ),
-              SizedBox(width: 11.w),
+
               Column(
                 children: [
                   _buildFeatureCard(
-                    bg: Assets.images.bgKeyboardIntimacyAnalyze.image(),
-                    title: Assets.images.iconKeyboardInitmacyTitle.image(
-                      width: 80.w,
-                      height: 19.h,
-                    ),
-                    subtitle: StringName.keyboardIntimacySubtitle,
-                    logo: Assets.images.iconKeyboardIntimacyLogo.image(
-                      width: 69.w,
-                      height: 68.w,
-                      fit: BoxFit.cover,
-                    ),
+                    bg: Assets.images.bgKeyboardIntimacyAnalyze.image(width: 162.w,height: 77.5.w,fit: BoxFit.contain,),
                     onTap: controller.clickIntimacyAnalyze,
                   ),
-                  SizedBox(height: 10.h),
                   _buildFeatureCard(
-                    bg: Assets.images.bgKeyboardScreenshotReply.image(),
-                    title: Assets.images.iconKeyboardScreenshotTitle.image(
-                      width: 72.w,
-                      height: 22.h,
-                    ),
-                    subtitle: StringName.keyboardScreenshotSubtitle,
-                    logo: Assets.images.iconKeyboardScreenshotLogo.image(
-                      width: 67.w,
-                      height: 59.w,
-                      fit: BoxFit.cover,
-                    ),
+                    bg: Assets.images.bgKeyboardScreenshotReply.image(width: 162.w,height: 77.5.w,fit: BoxFit.contain,),
                     onTap: controller.clickScreenshotReply,
                   ),
                 ],
@@ -520,62 +489,12 @@ class KeyBoardView extends BaseView<KeyBoardController> {
   // 功能卡片
   Widget _buildFeatureCard({
     required Widget bg,
-    required Widget title,
-    required String subtitle,
-    required Widget logo,
     required VoidCallback onTap,
   }) {
     return GestureDetector(
       onTap: onTap,
-      child: SizedBox(
-        height: 73.h,
-        width: 159.w,
-        child: Stack(
-          clipBehavior: Clip.none,
-          children: [
-            Positioned(
-              child: Container(
-                decoration: BoxDecoration(
-                  boxShadow: [
-                    BoxShadow(
-                      color: Colors.black.withValues(alpha: 0.10),
-                      offset: Offset(0, 6),
-                      blurRadius: 20,
-                      spreadRadius: 0,
-                    ),
-                  ],
-                ),
-                child: bg,
-              ),
-            ),
-            Row(
-              crossAxisAlignment: CrossAxisAlignment.start,
-              children: [
-                Container(
-                  padding: EdgeInsets.only(top: 12.h, left: 8.w),
-                  child: Column(
-                    crossAxisAlignment: CrossAxisAlignment.start,
-                    children: [
-                      title,
-                      Padding(
-                        padding: EdgeInsets.only(left: 2.w),
-                        child: Text(
-                          subtitle,
-                          style: TextStyle(
-                            color: Colors.black.withAlpha(128),
-                            fontSize: 10.sp,
-                            fontWeight: FontWeight.w400,
-                          ),
-                        ),
-                      ),
-                    ],
-                  ),
-                ),
-              ],
-            ),
-            Positioned(top: -5.h, right: 5.w, child: logo),
-          ],
-        ),
+      child: Container(
+        child: bg,
       ),
     );
   }

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

@@ -756,14 +756,6 @@ class $AssetsImagesGen {
   AssetGenImage get iconKeyboardHitPlay =>
       const AssetGenImage('assets/images/icon_keyboard_hit_play.webp');
 
-  /// File path: assets/images/icon_keyboard_initmacy_title.webp
-  AssetGenImage get iconKeyboardInitmacyTitle =>
-      const AssetGenImage('assets/images/icon_keyboard_initmacy_title.webp');
-
-  /// File path: assets/images/icon_keyboard_intimacy_logo.webp
-  AssetGenImage get iconKeyboardIntimacyLogo =>
-      const AssetGenImage('assets/images/icon_keyboard_intimacy_logo.webp');
-
   /// File path: assets/images/icon_keyboard_love_Index.webp
   AssetGenImage get iconKeyboardLoveIndex =>
       const AssetGenImage('assets/images/icon_keyboard_love_Index.webp');
@@ -793,14 +785,6 @@ class $AssetsImagesGen {
   AssetGenImage get iconKeyboardManageX =>
       const AssetGenImage('assets/images/icon_keyboard_manage_x.webp');
 
-  /// File path: assets/images/icon_keyboard_screenshot_logo.webp
-  AssetGenImage get iconKeyboardScreenshotLogo =>
-      const AssetGenImage('assets/images/icon_keyboard_screenshot_logo.webp');
-
-  /// File path: assets/images/icon_keyboard_screenshot_title.webp
-  AssetGenImage get iconKeyboardScreenshotTitle =>
-      const AssetGenImage('assets/images/icon_keyboard_screenshot_title.webp');
-
   /// File path: assets/images/icon_keyboard_title.webp
   AssetGenImage get iconKeyboardTitle =>
       const AssetGenImage('assets/images/icon_keyboard_title.webp');
@@ -1399,8 +1383,6 @@ class $AssetsImagesGen {
     iconKeyboardExplosivePlay,
     iconKeyboardGuideOverlay1,
     iconKeyboardHitPlay,
-    iconKeyboardInitmacyTitle,
-    iconKeyboardIntimacyLogo,
     iconKeyboardLoveIndex,
     iconKeyboardLoveLogo,
     iconKeyboardManageCustom,
@@ -1408,8 +1390,6 @@ class $AssetsImagesGen {
     iconKeyboardManageIntimacyText,
     iconKeyboardManagePlus,
     iconKeyboardManageX,
-    iconKeyboardScreenshotLogo,
-    iconKeyboardScreenshotTitle,
     iconKeyboardTitle,
     iconKeyboardTriangle,
     iconKeyboardTutorialHeader,

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

@@ -177,8 +177,6 @@ class StringName {
   static final String profileAdd = 'profile_add'.tr; // 添加
   static final String profileEdit = 'profile_edit'.tr; // 编辑
   static final String keyboardMemberOpen = 'keyboard_member_open'.tr; // 开通会员
-  static final String keyboardIntimacySubtitle = 'keyboard_intimacy_subtitle'.tr; // 探索人格/情感特质
-  static final String keyboardScreenshotSubtitle = 'keyboard_screenshot_subtitle'.tr; // 上下文语义分析
   static final String keyboardGoToManage = 'keyboard_go_to_manage'.tr; // 去管理
   static final String keyboardAdd = 'keyboard_add'.tr; // 添加
   static final String keyboardNoLogin = 'keyboard_no_login'.tr; // 自己
@@ -526,8 +524,6 @@ class StringMultiSource {
       'profile_add': '添加',
       'profile_edit': '编辑',
       'keyboard_member_open': '开通会员',
-      'keyboard_intimacy_subtitle': '探索人格/情感特质',
-      'keyboard_screenshot_subtitle': '上下文语义分析',
       'keyboard_go_to_manage': '去管理',
       'keyboard_add': '添加',
       'keyboard_no_login': '自己',