Browse Source

[new]优化短时间重复点击录音提交问题

zk 1 year ago
parent
commit
2d9be170ff

+ 1 - 0
lib/data/repositories/talk_repository.dart

@@ -9,6 +9,7 @@ import 'package:electronic_assistant/data/api/request/talk_create_request.dart';
 import 'package:electronic_assistant/data/api/request/talk_delete_request.dart';
 import 'package:electronic_assistant/data/api/request/talk_file_request.dart';
 import 'package:electronic_assistant/data/api/request/talk_translate_request.dart';
+import 'package:flutter/widgets.dart';
 import 'package:flutter_foreground_task/flutter_foreground_task.dart';
 import 'package:get/get.dart';
 import 'package:get/get_connect/http/src/request/request.dart';

+ 9 - 5
lib/module/record/controller.dart

@@ -11,11 +11,13 @@ import 'package:get/get.dart';
 import '../../data/consts/error_code.dart';
 import '../../dialog/alert_dialog.dart';
 import '../../router/app_pages.dart';
+import '../../utils/de_bounce.dart';
 import '../../utils/http_handler.dart';
 
 class RecordController extends BaseController {
   Rx<RecordStatus> currentStatus = recordHandler.currentStatus;
   RxDouble currentDuration = recordHandler.currentDuration;
+  final Debounce _saveDebounce = Debounce(debounceTime: 500);
 
   @override
   void onInit() {
@@ -76,11 +78,13 @@ class RecordController extends BaseController {
   }
 
   void onSaveClick() {
-    if (currentStatus.value == RecordStatus.pending) {
-      return;
-    }
-    EventHandler.report(EventId.event_100011);
-    _saveCurrentRecord();
+    _saveDebounce.onClick(() {
+      if (currentStatus.value == RecordStatus.pending) {
+        return;
+      }
+      EventHandler.report(EventId.event_100011);
+      _saveCurrentRecord();
+    });
   }
 
   Future<void> _startOrContinueRecord() async {

+ 20 - 0
lib/utils/de_bounce.dart

@@ -0,0 +1,20 @@
+class Debounce {
+  // 设定的时间间隔,单位为毫秒
+  final int debounceTime;
+
+  // 记录上次点击的时间
+  DateTime? _lastClickTime;
+
+  Debounce({this.debounceTime = 300});
+
+  // 点击事件处理方法
+  void onClick(Function action) {
+    DateTime now = DateTime.now();
+    if (_lastClickTime == null ||
+        now.difference(_lastClickTime!) >
+            Duration(milliseconds: debounceTime)) {
+      _lastClickTime = now;
+      action();
+    }
+  }
+}