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/repository/auth/auth_repository_imp.dart'; import 'package:rasadyar_livestock/presentation/routes/app_pages.dart'; GetIt get diLiveStock => GetIt.instance; Future setupLiveStockDI() async { diLiveStock.registerSingleton(DioErrorHandler()); var tokenService = Get.find(); if (tokenService.baseurl.value == null) { await tokenService.saveBaseUrl('https://api.dam.rasadyar.net/'); } diLiveStock.registerLazySingleton( () => AppInterceptor( refreshTokenCallback: () async { var authRepository = diLiveStock.get(); var hasAuthenticated = await authRepository.hasAuthenticated(); if (hasAuthenticated) { var 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 the DioRemote client diLiveStock.registerLazySingleton( () => DioRemote( baseUrl: tokenService.baseurl.value, interceptors: diLiveStock.get(), ), ); var dioRemoteClient = diLiveStock.get(); await dioRemoteClient.init(); // Register the AuthRemote data source implementation diLiveStock.registerLazySingleton( () => AuthRemoteDataSourceImp(diLiveStock.get()), ); // Register the AuthRepository implementation diLiveStock.registerLazySingleton( () => AuthRepositoryImp(diLiveStock.get()), ); }