You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
144 lines
5.2 KiB
144 lines
5.2 KiB
import 'package:get/get.dart';
|
|
import '../../core/controllers/permission_controller.dart';
|
|
import '../../data/services/audio_service.dart';
|
|
import '../../data/services/notification_service.dart';
|
|
import '../../data/services/volcano_ai_service.dart';
|
|
import '../../data/services/volcano_tts_api_service.dart';
|
|
import '../../data/services/volcano_translation_service.dart';
|
|
import '../../data/services/azure_tts_service.dart';
|
|
|
|
import '../../data/services/background_agent_service.dart';
|
|
import '../../data/services/chat_history_service.dart';
|
|
import '../../data/services/flutter_tts_service.dart';
|
|
import '../../data/services/volcano_asr_api_service.dart';
|
|
// import '../../data/services/audio_processing_service.dart';
|
|
import '../../core/utils/logger.dart';
|
|
import '../../core/utils/app_lifecycle_manager.dart';
|
|
import 'package:flutter_dotenv/flutter_dotenv.dart';
|
|
|
|
/// 初始绑定,用于管理全局依赖
|
|
class InitialBinding extends Bindings {
|
|
@override
|
|
void dependencies() {
|
|
// 立即初始化关键服务
|
|
_initializeCriticalServices();
|
|
|
|
// 延时加载其他服务
|
|
_registerLazyServices();
|
|
}
|
|
|
|
/// 初始化关键服务(立即加载)
|
|
void _initializeCriticalServices() async {
|
|
// 应用生命周期管理器是最基础的服务,需要最先初始化
|
|
Get.put(AppLifecycleManager(), permanent: true);
|
|
|
|
// 通知服务和权限控制器是关键服务,需要立即初始化
|
|
final notificationService = Get.put(NotificationService(), permanent: true);
|
|
final permissionController = Get.put(PermissionController(), permanent: true);
|
|
|
|
// 音频服务也是基础服务,需要立即初始化
|
|
final audioService = Get.put(AudioServiceManager(), permanent: true);
|
|
|
|
// 异步初始化通知和音频服务
|
|
_initializeNotificationAndAudioServices(notificationService, audioService);
|
|
}
|
|
|
|
/// 注册延时加载的服务
|
|
void _registerLazyServices() {
|
|
// 使用lazyPut注册服务,只有在首次访问时才会被实例化
|
|
|
|
// AI相关服务
|
|
Get.lazyPut<VolcanoAIService>(() => VolcanoAIService(), fenix: true);
|
|
Get.lazyPut<VolcanoTtsApiService>(() {
|
|
final service = VolcanoTtsApiService();
|
|
return service;
|
|
}, fenix: true);
|
|
|
|
// Azure TTS 服务
|
|
Get.lazyPut<AzureTtsService>(() => AzureTtsService(), fenix: true);
|
|
|
|
// 语音识别服务
|
|
// Get.lazyPut<AzureAsrService>(() {
|
|
// final service = AzureAsrService();
|
|
// // 在首次访问时初始化
|
|
// _initializeAzureService(service);
|
|
// return service;
|
|
// }, fenix: true);
|
|
|
|
// 翻译服务
|
|
Get.lazyPut<VolcanoTranslationService>(() {
|
|
final service = VolcanoTranslationService();
|
|
// 在首次访问时初始化
|
|
_initializeVolcanoTranslationService(service);
|
|
return service;
|
|
}, fenix: true);
|
|
|
|
// TTS服务
|
|
// Get.lazyPut<FlutterTtsService>(() => FlutterTtsService(), fenix: true);
|
|
|
|
// 音频处理服务
|
|
// Get.lazyPut<AudioProcessingService>(() => AudioProcessingService(), fenix: true);
|
|
|
|
// 火山ASR API服务
|
|
Get.lazyPut<VolcanoAsrApiService>(() => VolcanoAsrApiService(), fenix: true);
|
|
|
|
// 聊天历史服务
|
|
Get.lazyPut<ChatHistoryService>(() => ChatHistoryService(), fenix: true);
|
|
|
|
// 后台代理服务 (依赖于聊天历史服务)
|
|
Get.lazyPut<BackgroundAgentService>(() => BackgroundAgentService(), fenix: true);
|
|
}
|
|
|
|
// 初始化通知和音频服务
|
|
void _initializeNotificationAndAudioServices(NotificationService notificationService, AudioServiceManager audioService) async {
|
|
try {
|
|
// 首先初始化通知服务
|
|
await notificationService.init().catchError((error) {
|
|
Logger.error('通知服务初始化失败', error);
|
|
return null;
|
|
});
|
|
|
|
// 等待一段时间,确保通知权限请求完成
|
|
// await Future.delayed(Duration(seconds: 1));
|
|
|
|
// 然后初始化音频服务
|
|
await audioService.init().then((_) {
|
|
Logger.info('AudioServiceManager 初始化完成,可以接收蓝牙耳机按键事件');
|
|
});
|
|
} catch (e) {
|
|
Logger.error('服务初始化过程中发生错误', e);
|
|
}
|
|
}
|
|
|
|
// // 初始化 Azure 语音识别服务
|
|
// void _initializeAzureService(AzureAsrService azureAsrService) async {
|
|
// try {
|
|
// // 直接调用初始化方法,服务内部会读取环境变量配置
|
|
// final success = await azureAsrService.initialize();
|
|
|
|
// if (success) {
|
|
// Logger.info('Azure 语音识别服务初始化成功');
|
|
// } else {
|
|
// Logger.error('Azure 语音识别服务初始化失败');
|
|
// }
|
|
// } catch (e) {
|
|
// Logger.error('初始化 Azure 语音识别服务失败', e);
|
|
// }
|
|
// }
|
|
|
|
// 初始化火山翻译服务
|
|
void _initializeVolcanoTranslationService(VolcanoTranslationService translationService) async {
|
|
try {
|
|
// 直接调用初始化方法,服务内部会读取环境变量配置
|
|
final success = await translationService.initialize();
|
|
|
|
if (success) {
|
|
Logger.info('火山翻译服务初始化成功');
|
|
} else {
|
|
Logger.error('火山翻译服务初始化失败');
|
|
}
|
|
} catch (e) {
|
|
Logger.error('初始化火山翻译服务失败', e);
|
|
}
|
|
}
|
|
}
|