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_asr_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(), fenix: true); Get.lazyPut(() { final service = VolcanoTtsApiService(); return service; }, fenix: true); // 语音识别服务 // Get.lazyPut(() { // final service = AzureAsrService(); // // 在首次访问时初始化 // _initializeAzureService(service); // return service; // }, fenix: true); // 翻译服务 Get.lazyPut(() { final service = VolcanoTranslationService(); // 在首次访问时初始化 _initializeVolcanoTranslationService(service); return service; }, fenix: true); // TTS服务 // Get.lazyPut(() => FlutterTtsService(), fenix: true); // 音频处理服务 // Get.lazyPut(() => AudioProcessingService(), fenix: true); // 火山ASR API服务 Get.lazyPut(() => VolcanoAsrApiService(), fenix: true); // 聊天历史服务 Get.lazyPut(() => ChatHistoryService(), fenix: true); // 后台代理服务 (依赖于聊天历史服务) Get.lazyPut(() => 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); } } }