import 'package:get_it/get_it.dart'; import 'package:flutter/foundation.dart'; import '../core/constants/app_constants.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/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/secure_storage.dart'; final sl = GetIt.instance; Future initDependencies() async { sl.registerLazySingleton(() => SecureStorage()); sl.registerLazySingleton(() => ApiClient(sl())); sl.registerLazySingleton(() => TtsService()); sl.registerLazySingleton(() => SttService()); sl.registerLazySingleton(() => HapticService()); sl.registerLazySingleton(() => ObstacleAnalyzer()); sl.registerLazySingleton(() => YoloDetector(sl())); sl.registerLazySingleton(() => OfflineQueueService()); sl.registerLazySingleton(() => FcmService(sl())); sl.registerLazySingleton(() => WebSocketService(sl())); sl.registerLazySingleton(() => LocationReporterService(sl(), sl())); sl.registerLazySingleton(() => CallService(sl())); sl.registerLazySingleton( () => VoiceCommandHandler(sl(), sl()), ); final serverUrl = await AppConstants.getServerUrl(); if (serverUrl != null && serverUrl.isNotEmpty) { await sl().init(serverUrl); } try { await sl().init(); } catch (e) { debugPrint('TTS init skipped: $e'); } await sl().init(); if (!kIsWeb) { try { await sl().init(); } catch (e) { debugPrint('STT init skipped: $e'); } } sl().loadDefaultCommands(); if (!kIsWeb) { await sl().init(); } }