import 'package:rasadyar_core/core.dart'; import 'package:rasadyar_livestock/data/common/dio_exception_handeler.dart'; import 'package:rasadyar_livestock/data/data_source/remote/auth/auth_remote.dart'; import 'package:rasadyar_livestock/data/data_source/remote/auth/auth_remote_imp.dart'; import 'package:rasadyar_livestock/data/data_source/remote/livestock/livestock_remote.dart'; import 'package:rasadyar_livestock/data/data_source/remote/livestock/livestock_remote_imp.dart'; import 'package:rasadyar_livestock/data/repository/auth/auth_repository.dart'; import 'package:rasadyar_livestock/data/repository/auth/auth_repository_imp.dart'; import 'package:rasadyar_livestock/data/repository/livestock/livestock_repository.dart'; import 'package:rasadyar_livestock/data/repository/livestock/livestock_repository_imp.dart'; import 'package:rasadyar_livestock/data/service/live_stock_storage_service.dart'; import 'package:rasadyar_livestock/hive_registrar.g.dart'; import 'package:rasadyar_livestock/presentation/routes/app_pages.dart'; GetIt get diLiveStock => GetIt.instance; Future setupLiveStockDI() async { diLiveStock.registerSingleton(DioErrorHandler()); await IsolatedHive.initFlutter(); IsolatedHive.registerAdapters(); iLog("Sssssssssssssssssssss"); final tokenService = Get.find(); Get.put(LiveStockStorageService()); if (tokenService.baseurl.value == null) { await tokenService.saveBaseUrl('https://api.dam.rasadyar.net/'); } // First register AppInterceptor with lazy callbacks diLiveStock.registerLazySingleton( () => AppInterceptor( refreshTokenCallback: () async { // Use lazy access to avoid circular dependency final authRepository = diLiveStock.get(); final hasAuthenticated = await authRepository.hasAuthenticated(); if (hasAuthenticated) { final newToken = await authRepository.loginWithRefreshToken( authRequest: {'refresh': tokenService.refreshToken.value}, ); return newToken?.access; } return null; }, saveTokenCallback: (String newToken) async { await tokenService.saveAccessToken(newToken); }, clearTokenCallback: () async { await tokenService.deleteTokens(); Get.offAllNamed(LiveStockRoutes.auth, arguments: Module.liveStocks); }, authArguments: Module.liveStocks, ), ); // Register DioRemote with the interceptor diLiveStock.registerLazySingleton( () => DioRemote( baseUrl: tokenService.baseurl.value, // interceptors: diLiveStock.get(), ), ); // Initialize DioRemote await diLiveStock.get().init(); // Now register the data source and repository //region Auth diLiveStock.registerLazySingleton( () => AuthRemoteDataSourceImp(diLiveStock.get()), ); diLiveStock.registerLazySingleton( () => AuthRepositoryImp(authRemote: diLiveStock.get()), ); //endregion //region Livestock diLiveStock.registerLazySingleton( () => LivestockRemoteDataSourceImp(), ); diLiveStock.registerLazySingleton( () => LivestockRepositoryImp(livestockRemote: diLiveStock.get()), ); //endregion diLiveStock.registerLazySingleton(() => ImagePicker()); await diLiveStock.allReady(); }