import 'package:get_it/get_it.dart'; import 'package:dio/dio.dart'; import 'package:shared_preferences/shared_preferences.dart'; import '../../core/network/api_client.dart'; import '../../features/auth/presentation/bloc/auth_bloc.dart'; import '../../features/chat/presentation/bloc/chat_bloc.dart'; import '../../features/settings/data/datasources/settings_local_datasource.dart'; import '../../features/settings/data/datasources/settings_remote_datasource.dart'; import '../../features/settings/data/repositories/settings_repository_impl.dart'; import '../../features/settings/domain/repositories/settings_repository.dart'; import '../../features/settings/presentation/bloc/settings_bloc.dart'; final sl = GetIt.instance; Future initDependencies() async { // Core - SharedPreferences final prefs = await SharedPreferences.getInstance(); sl.registerLazySingleton(() => prefs); // Core - Settings Local DataSource sl.registerLazySingleton( () => SettingsLocalDataSourceImpl(sl()), ); // Core - Dio (with dynamic base URL from settings) sl.registerLazySingleton(() { final apiUrl = prefs.getString('api_url') ?? 'https://api.messenger.app'; return Dio(BaseOptions( baseUrl: apiUrl, connectTimeout: const Duration(seconds: 30), receiveTimeout: const Duration(seconds: 30), )); }); // Core - API Client sl.registerLazySingleton(() => ApiClient(sl())); // Settings sl.registerLazySingleton( () => SettingsRemoteDataSourceImpl(sl()), ); sl.registerLazySingleton( () => SettingsRepositoryImpl(sl(), sl()), ); sl.registerFactory(() => SettingsBloc(sl())); // Auth sl.registerFactory(() => AuthBloc()); // Chat sl.registerFactory(() => ChatBloc()); }