Quellcode durchsuchen

[new]录音界面增加积分不足时提醒

zk vor 1 Jahr
Ursprung
Commit
2a8790b0de

BIN
assets/images/icon_record_available_time.webp


BIN
assets/images/icon_record_integration_insufficient.webp


BIN
assets/images/icon_record_integration_insufficient_close.webp


BIN
assets/images/icon_record_recharge.webp


+ 1 - 2
lib/data/bean/chat_item.dart

@@ -17,7 +17,7 @@ class ChatItem {
   String content;
 
   @JsonKey(name: "createTime")
-  final String createTime;
+  final String? createTime;
 
   @JsonKey(name: "talkId")
   String? talkId;
@@ -34,7 +34,6 @@ class ChatItem {
   });
 
   factory ChatItem.fromJson(Map<String, dynamic> json) => _$ChatItemFromJson(json);
-
   static String _intToString(int value) => value.toString();
   static int _stringToInt(String value) => int.parse(value);
 }

+ 16 - 0
lib/module/record/controller.dart

@@ -1,13 +1,16 @@
 import 'package:electronic_assistant/base/base_controller.dart';
 import 'package:electronic_assistant/data/bean/talks.dart';
 import 'package:electronic_assistant/data/consts/event_report_id.dart';
+import 'package:electronic_assistant/data/repositories/account_repository.dart';
 import 'package:electronic_assistant/handler/event_handler.dart';
 import 'package:electronic_assistant/module/record/constants.dart';
 import 'package:electronic_assistant/module/record/record_handler.dart';
+import 'package:electronic_assistant/module/store/view.dart';
 import 'package:electronic_assistant/module/talk/view.dart';
 import 'package:electronic_assistant/utils/desktop_shortcut_utils.dart';
 import 'package:electronic_assistant/utils/toast_util.dart';
 import 'package:get/get.dart';
+import '../../data/api/response/user_info_response.dart';
 import '../../data/consts/error_code.dart';
 import '../../dialog/alert_dialog.dart';
 import '../../router/app_pages.dart';
@@ -19,6 +22,10 @@ class RecordController extends BaseController {
   RxDouble currentDuration = recordHandler.currentDuration;
   final Debounce _saveDebounce = Debounce(debounceTime: 500);
 
+  UserInfoResponse? get userInfo => accountRepository.userInfo.value;
+
+  final RxBool isHideIntegrationInsufficient = RxBool(false);
+
   @override
   void onInit() {
     super.onInit();
@@ -41,6 +48,7 @@ class RecordController extends BaseController {
     recordHandler.onClose();
   }
 
+  RxInt count = 0.obs; // 使用 .obs 将其转换为 Rx 类型
   void addShortcut() {
     DesktopShortcutUtils.requestAddDesktopShortcut();
   }
@@ -122,4 +130,12 @@ class RecordController extends BaseController {
     Get.back();
     TalkPage.start(talkInfo, eventTag: EventId.id_001);
   }
+
+  void onAvailableTimeClick() {
+    StorePage.start();
+  }
+
+  void onCloseAvailableTimeClick() {
+    isHideIntegrationInsufficient.value = true;
+  }
 }

+ 92 - 0
lib/module/record/view.dart

@@ -66,9 +66,101 @@ class RecordPage extends BasePage<RecordController> {
           ],
         ),
       ),
+      _buildAvailableTimeRemind(),
     ]);
   }
 
+  Widget _buildAvailableTimeRemind() {
+    return Obx(() {
+      int? electric = controller.userInfo?.memberInfo?.electric;
+      return Visibility(
+        visible: electric != null &&
+            electric < 12 &&
+            !controller.isHideIntegrationInsufficient.value,
+        child: IntrinsicHeight(
+          child: Align(
+              alignment: Alignment.bottomCenter,
+              child: Container(
+                  margin: EdgeInsets.only(
+                    left: 16.w,
+                    right: 16.w,
+                    bottom: 200.h,
+                  ),
+                  child: Stack(
+                    children: [
+                      Align(
+                        alignment: Alignment.bottomCenter,
+                        child: Container(
+                          width: double.infinity,
+                          height: 48.w,
+                          decoration: BoxDecoration(
+                            borderRadius: BorderRadius.circular(10.w),
+                            gradient: LinearGradient(colors: [
+                              '#8671FF'.color,
+                              '#3E55FF'.color,
+                              '#7E80FE'.color,
+                            ], stops: const [
+                              0.0,
+                              0.7,
+                              1
+                            ]),
+                          ),
+                          child: Stack(
+                            children: [
+                              Align(
+                                alignment: const Alignment(-0.05, -0.15),
+                                child: Assets
+                                    .images.iconRecordIntegrationInsufficient
+                                    .image(width: 153.w, height: 20.w),
+                              ),
+                              Align(
+                                  alignment: Alignment.centerRight,
+                                  child: GestureDetector(
+                                    onTap: () =>
+                                        controller.onAvailableTimeClick(),
+                                    child: Container(
+                                        padding: EdgeInsets.symmetric(
+                                            horizontal: 10.w, vertical: 4.w),
+                                        decoration: BoxDecoration(
+                                          gradient: RadialGradient(
+                                              center: Alignment.centerRight,
+                                              colors: [
+                                                "#E7F2FF".toColor(),
+                                                "#FFFFFF".toColor(),
+                                                "#F9E8FF".toColor()
+                                              ],
+                                              radius: 2),
+                                          borderRadius:
+                                              BorderRadius.circular(100.w),
+                                        ),
+                                        margin: EdgeInsets.only(right: 12.w),
+                                        child: Assets.images.iconRecordRecharge
+                                            .image(width: 39.w, height: 19.w)),
+                                  ))
+                            ],
+                          ),
+                        ),
+                      ),
+                      Assets.images.iconRecordAvailableTime
+                          .image(width: 88.w, height: 77.w),
+                      Align(
+                        alignment: Alignment.topRight,
+                        child: GestureDetector(
+                          onTap: () {
+                            controller.onCloseAvailableTimeClick();
+                          },
+                          child: Assets
+                              .images.iconRecordIntegrationInsufficientClose
+                              .image(width: 18.w, height: 18.w),
+                        ),
+                      )
+                    ],
+                  ))),
+        ),
+      );
+    });
+  }
+
   Widget _buildAddShortcut(bool visible) {
     return GestureDetector(
       onTap: () {