Browse Source

修改按住说话防抖

weicu
tanlongsheng 1 year ago
parent
commit
ec7251c591
  1. 60
      lib/modules/chat/controllers/chat_controller.dart
  2. 2
      lib/modules/chat/views/chat_view.dart

60
lib/modules/chat/controllers/chat_controller.dart

@ -98,7 +98,9 @@ class ChatController extends GetxController {
String finalResult = '';
// 按住说话防抖
bool isDebounce = false;
Timer? _talkDebounceTimer;
Timer? _talkStartDebounceTimer;
@override
Future<void> onInit() async {
@ -295,6 +297,7 @@ class ChatController extends GetxController {
_autoStopTimer?.cancel();
_scrollDebounceTimer?.cancel(); // 清理防抖计时器
_talkDebounceTimer?.cancel();
_talkStartDebounceTimer?.cancel();
_amapFlutter.dispose();
_locationStream?.cancel();
@ -591,38 +594,46 @@ class ChatController extends GetxController {
// 按下开始说话
void talkLongPress() async {
_talkStartDebounceTimer?.cancel();
_talkDebounceTimer?.cancel();
if (isHoldSpeak.value) return;
isHoldSpeak.value = true;
Haptics.vibrate(HapticsType.success);
_voiceInteractionService.pauseVoiceInteraction();
// 中断当前响应
_interruptCurrentResponse("发送新消息,中断当前响应");
try {
final recognitionStream = await _asrService.startContinuousRecognition();
await Future.delayed(const Duration(milliseconds: 150));
_talkStartDebounceTimer =
Timer(const Duration(milliseconds: 260), () async {
if (isDebounce) return;
isHoldSpeak.value = true;
recognizedText.value = '';
finalResult = '';
Haptics.vibrate(HapticsType.success);
_voiceInteractionService.pauseVoiceInteraction();
// 中断当前响应
_interruptCurrentResponse("发送新消息,中断当前响应");
try {
final recognitionStream =
await _asrService.startContinuousRecognition();
await Future.delayed(const Duration(milliseconds: 260));
isDebounce = true;
recognizedText.value = '';
finalResult = '';
// 监听识别事件
_recognitionSubscription = recognitionStream.listen(
_handleRecognitionEvent,
onError: _handleRecognitionError,
);
} catch (e) {
Logger.error('启动语音识别失败', e);
isHoldSpeak.value = false;
}
// 监听识别事件
_recognitionSubscription = recognitionStream.listen(
_handleRecognitionEvent,
onError: _handleRecognitionError,
);
} catch (e) {
Logger.error('启动语音识别失败', e);
isHoldSpeak.value = false;
}
});
}
// 松开停止说话
void talkLongPressUp() async {
_talkStartDebounceTimer?.cancel();
_talkDebounceTimer?.cancel();
_talkDebounceTimer = Timer(const Duration(milliseconds: 200), () async {
if (!isHoldSpeak.value) return;
isHoldSpeak.value = false;
_talkDebounceTimer = Timer(const Duration(milliseconds: 300), () async {
if (!isDebounce) return;
try {
await _asrService.stopContinuousRecognition();
_recognitionSubscription?.cancel();
@ -641,7 +652,8 @@ class ChatController extends GetxController {
recognizedText.value = '';
finalResult = '';
isHoldSpeak.value = false;
isDebounce = false;
} catch (e) {
Logger.error('停止语音识别失败', e);
}

2
lib/modules/chat/views/chat_view.dart

@ -438,7 +438,7 @@ class ChatView extends GetView<ChatController> {
filled: false,
border: InputBorder.none,
focusedBorder: InputBorder.none,
contentPadding: EdgeInsets.only(left: 10.w),
contentPadding: EdgeInsets.only(left: 6.w),
),
onSubmitted: (value) {
if (value.trim().isNotEmpty) {

Loading…
Cancel
Save