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.

140 lines
5.1 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_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>(() => VolcanoAIService(), fenix: true);
Get.lazyPut<VolcanoTtsApiService>(() {
final service = VolcanoTtsApiService();
return service;
}, 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);
}
}
}