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/hive_registrar.g.dart'; import 'package:rasadyar_livestock/presentation/routes/app_pages.dart'; import '../data/data_source/local/tmp/tmp_local_data-source.dart'; GetIt get diLiveStock => GetIt.instance; Future setupLiveStockDI() async { diLiveStock.registerSingleton(DioErrorHandler()); await IsolatedHive.initFlutter(); IsolatedHive.registerAdapters(); final tokenService = Get.find(); 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(() => TmpLocalDataSource()); diLiveStock.registerLazySingleton( () => LivestockRepositoryImp( livestockRemote: diLiveStock.get(), tmpLocalDataSource: diLiveStock.get(), ), ); //endregion diLiveStock.registerLazySingleton(() => ImagePicker()); await diLiveStock.allReady(); }