import 'dart:async'; import 'package:yx_asr/yx_asr.dart'; /// 模拟语音识别服务,用于测试 class MockSpeechService implements SpeechRecognitionService { bool _isListening = false; bool _isAvailable = true; bool _hasPermission = true; bool _initializeResult = true; // 流控制器 final StreamController _resultController = StreamController.broadcast(); final StreamController _errorController = StreamController.broadcast(); final StreamController _statusController = StreamController.broadcast(); // 配置模拟行为 void setAvailable(bool available) => _isAvailable = available; void setHasPermission(bool hasPermission) => _hasPermission = hasPermission; void setInitializeResult(bool result) => _initializeResult = result; // 模拟发送结果 void mockResult(String text, {double confidence = 1.0}) { _resultController.add(SpeechRecognitionResult( recognizedWords: text, confidence: confidence, alternatives: [], )); } // 模拟发送错误 void mockError(SpeechRecognitionErrorType type, String message) { _errorController.add(SpeechRecognitionError( errorType: type, errorMsg: message, errorCode: null, )); } // 模拟状态变化 void mockStatusChange(bool isListening) { _isListening = isListening; _statusController.add(isListening); } @override Future isAvailable() async => _isAvailable; @override Future hasPermission() async => _hasPermission; @override Future requestPermission() async => _hasPermission; @override Future initialize(Map config) async { await Future.delayed(const Duration(milliseconds: 100)); // 模拟异步操作 return _initializeResult; } @override Future startListening({bool partialResults = true}) async { if (!_isListening) { _isListening = true; _statusController.add(true); } } @override Future stopListening() async { if (_isListening) { _isListening = false; _statusController.add(false); } } @override Future cancel() async { _isListening = false; _statusController.add(false); } @override bool get isListening => _isListening; @override Stream get onResult => _resultController.stream; @override Stream get onError => _errorController.stream; @override Stream get onListeningStatusChanged => _statusController.stream; @override Future dispose() async { await _resultController.close(); await _errorController.close(); await _statusController.close(); } } /// 模拟失败的语音识别服务 class FailingSpeechService implements SpeechRecognitionService { final StreamController _resultController = StreamController.broadcast(); final StreamController _errorController = StreamController.broadcast(); final StreamController _statusController = StreamController.broadcast(); @override Future isAvailable() async => false; @override Future hasPermission() async => false; @override Future requestPermission() async => false; @override Future initialize(Map config) async => false; @override Future startListening({bool partialResults = true}) async { throw Exception('模拟启动失败'); } @override Future stopListening() async { throw Exception('模拟停止失败'); } @override Future cancel() async {} @override bool get isListening => false; @override Stream get onResult => _resultController.stream; @override Stream get onError => _errorController.stream; @override Stream get onListeningStatusChanged => _statusController.stream; @override Future dispose() async { await _resultController.close(); await _errorController.close(); await _statusController.close(); } }