import 'dart:async'; import 'package:flutter/foundation.dart'; import 'package:get/get.dart'; // 移除 speech_to_text 依赖 // import 'package:speech_to_text/speech_to_text.dart'; // import 'package:speech_to_text/speech_recognition_result.dart'; import '../../core/utils/logger.dart'; /// ASR状态枚举 enum AsrState { notInitialized, // 未初始化 initialized, // 已初始化 listening, // 正在监听 notListening, // 未监听 error // 错误状态 } /// 监听模式枚举(与 speech_to_text 兼容) enum ListenMode { deviceDefault, dictation, search, confirmation, } /// 本地名称类(与 speech_to_text 兼容) class LocaleName { final String name; final String localeId; LocaleName(this.name, this.localeId); } /// Flutter ASR服务,负责本地语音转文本功能 /// 注意:此实现为空实现,不再依赖 speech_to_text 插件 class FlutterAsrService extends GetxService { // 当前ASR状态 final Rx _asrState = AsrState.notInitialized.obs; AsrState get asrState => _asrState.value; // 可用的语音识别语言 final RxList _locales = [].obs; List get locales => _locales; // 当前选择的语言 final RxString _currentLocale = ''.obs; String get currentLocale => _currentLocale.value; // 识别结果 final RxString _lastWords = ''.obs; String get lastWords => _lastWords.value; // 识别准确度 final RxDouble _confidence = 0.0.obs; double get confidence => _confidence.value; // 是否可用 final RxBool _isAvailable = false.obs; bool get isAvailable => _isAvailable.value; // 是否正在监听 bool _isListening = false; bool get isListening => _isListening; // 识别结果流 final _recognitionResultsController = StreamController.broadcast(); Stream get recognitionResults => _recognitionResultsController.stream; @override void onInit() { super.onInit(); _initSpeech(); } /// 初始化语音识别 Future _initSpeech() async { try { // 空实现,不再使用 speech_to_text _isAvailable.value = false; _asrState.value = AsrState.error; // 添加一个默认语言 _locales.add(LocaleName('中文 (简体)', 'zh-CN')); _currentLocale.value = 'zh-CN'; Logger.info('FlutterAsrService 已初始化(空实现)'); } catch (e) { _asrState.value = AsrState.error; _isAvailable.value = false; Logger.error('语音识别初始化失败: $e'); } } /// 开始监听 /// /// [listenFor] 监听时长,默认30秒 /// [pauseFor] 暂停时长,默认3秒,超过此时长无语音输入会自动停止 /// [partialResults] 是否返回部分结果,默认true /// [onDevice] 是否使用设备本地识别,默认false /// [listenMode] 监听模式,默认设备默认模式 Future startListening({ Duration listenFor = const Duration(seconds: 30), Duration pauseFor = const Duration(seconds: 3), bool partialResults = true, bool onDevice = false, ListenMode listenMode = ListenMode.deviceDefault, }) async { // 空实现,不再使用 speech_to_text Logger.error('FlutterAsrService 为空实现,不支持语音识别'); return false; } /// 停止监听 Future stopListening() async { // 空实现,不再使用 speech_to_text _isListening = false; _asrState.value = AsrState.notListening; } /// 取消监听 Future cancelListening() async { // 空实现,不再使用 speech_to_text _isListening = false; _lastWords.value = ''; _confidence.value = 0.0; _asrState.value = AsrState.notListening; } /// 设置当前语言 void setLocale(String localeId) { if (_currentLocale.value != localeId) { _currentLocale.value = localeId; Logger.info('设置语音识别语言: $localeId'); } } @override void onClose() { _recognitionResultsController.close(); super.onClose(); } }