import 'package:get_it/get_it.dart'; import 'package:flutter/foundation.dart'; import '../core/constants/app_constants.dart'; import '../core/ai/obstacle_alert_strategy.dart'; import '../core/ai/obstacle_analyzer.dart'; import '../core/ai/yolo_detector.dart'; import '../core/network/api_client.dart'; import '../core/services/haptic_service.dart'; import '../core/services/call_service.dart'; import '../core/services/fcm_service.dart'; import '../core/services/hardware_shortcut_listener.dart'; import '../core/services/location_reporter_service.dart'; import '../core/services/offline_queue_service.dart'; import '../core/services/stt_service.dart'; import '../core/services/tts_service.dart'; import '../core/services/voice_command_handler.dart'; import '../core/services/websocket_service.dart'; import '../core/storage/local_database.dart'; import '../core/storage/secure_storage.dart'; import '../core/utils/init_guard.dart'; import '../features/notifications/application/notification_cubit.dart'; import '../features/notifications/data/repositories/notification_repository_impl.dart'; import '../features/notifications/domain/repositories/notification_repository.dart'; import '../features/sos/application/sos_cubit.dart'; import '../features/sos/data/repositories/sos_repository_impl.dart'; import '../features/sos/domain/repositories/sos_repository.dart'; import '../features/walk_guide/application/walk_guide_cubit.dart'; import '../features/walk_guide/data/repositories/walk_guide_repository_impl.dart'; import '../features/walk_guide/domain/repositories/walk_guide_repository.dart'; final sl = GetIt.instance; Future initDependencies() async { sl.registerLazySingleton(() => SecureStorage()); sl.registerLazySingleton(() => LocalDatabase()); sl.registerLazySingleton(() => ApiClient(sl())); sl.registerLazySingleton(() => TtsService()); sl.registerLazySingleton(() => SttService()); sl.registerLazySingleton(() => HapticService()); sl.registerLazySingleton( () => TtsWithHapticObstacleAlertStrategy(sl(), sl()), ); sl.registerLazySingleton(() => ObstacleAnalyzer()); sl.registerLazySingleton(() => YoloDetector(sl())); sl.registerLazySingleton( () => OfflineQueueService(sl()), ); sl.registerLazySingleton(() => FcmService(sl())); sl.registerLazySingleton(() => WebSocketService(sl())); sl.registerLazySingleton(() => LocationReporterService(sl(), sl())); sl.registerLazySingleton(() => CallService(sl())); sl.registerLazySingleton( () => HardwareShortcutListener(sl()), ); sl.registerLazySingleton( () => VoiceCommandHandler(sl(), sl()), ); sl.registerLazySingleton( () => WalkGuideRepositoryImpl(sl(), sl()), ); sl.registerFactory(() => WalkGuideCubit(sl())); sl.registerLazySingleton(() => SosRepositoryImpl(sl())); sl.registerFactory(() => SosCubit(sl())); sl.registerLazySingleton( () => NotificationRepositoryImpl(sl(), sl()), ); sl.registerFactory( () => NotificationCubit(sl()), ); final serverUrl = await AppConstants.getServerUrl(); if (serverUrl != null && serverUrl.isNotEmpty) { await sl().init(serverUrl); } await ignoreInitFailure(() => sl().init(), label: 'TTS init'); await sl().init(); if (!kIsWeb) { await ignoreInitFailure(() => sl().init(), label: 'STT init'); } sl().loadDefaultCommands(); if (!kIsWeb) { await sl().init(); } }