import 'package:rasadyar_chicken/chicken.dart'; import 'package:rasadyar_chicken/data/common/dio_error_handler.dart'; import 'package:rasadyar_chicken/data/data_source/local/chicken_local.dart'; import 'package:rasadyar_chicken/data/data_source/local/chicken_local_imp.dart'; import 'package:rasadyar_chicken/data/data_source/remote/auth/auth_remote.dart'; import 'package:rasadyar_chicken/data/data_source/remote/auth/auth_remote_imp.dart'; import 'package:rasadyar_chicken/data/data_source/remote/chicken/chicken_remote.dart'; import 'package:rasadyar_chicken/data/data_source/remote/chicken/chicken_remote_imp.dart'; import 'package:rasadyar_chicken/data/data_source/remote/kill_house/kill_house_remote.dart'; import 'package:rasadyar_chicken/data/data_source/remote/kill_house/kill_house_remote_impl.dart'; import 'package:rasadyar_chicken/data/data_source/remote/poultry_science/poultry_science_remote.dart'; import 'package:rasadyar_chicken/data/data_source/remote/poultry_science/poultry_science_remote_imp.dart'; import 'package:rasadyar_chicken/data/repositories/auth/auth_repository.dart'; import 'package:rasadyar_chicken/data/repositories/auth/auth_repository_imp.dart'; import 'package:rasadyar_chicken/data/repositories/chicken/chicken_repository.dart'; import 'package:rasadyar_chicken/data/repositories/chicken/chicken_repository_imp.dart'; import 'package:rasadyar_chicken/data/repositories/kill_house/kill_house_repository.dart'; import 'package:rasadyar_chicken/data/repositories/kill_house/kill_house_repository_impl.dart'; import 'package:rasadyar_chicken/data/repositories/poultry_science/poultry_science_repository.dart'; import 'package:rasadyar_chicken/data/repositories/poultry_science/poultry_science_repository_imp.dart'; import 'package:rasadyar_core/core.dart'; GetIt diChicken = GetIt.asNewInstance(); Future setupChickenDI() async { if (diChicken.isRegistered()) { await diChicken.unregister(); } diChicken.registerSingleton(DioErrorHandler()); var tokenService = Get.find(); tokenService.getBaseUrl(Module.chicken); diChicken.registerLazySingleton( () => AppInterceptor( // سامانه مرغ فعلاً رفرش توکن ندارد refreshTokenCallback: () async => null, saveTokenCallback: (String newToken) async { await tokenService.saveAccessToken(Module.chicken, newToken); }, clearTokenCallback: () async { await tokenService.deleteModuleTokens(Module.chicken); Get.offAllNamed(ChickenRoutes.auth, arguments: Module.chicken); }, ), instanceName: 'chickenInterceptor', ); var baseUrl = tokenService.baseurl.value; diChicken.registerLazySingleton( () => DioRemote( baseUrl: baseUrl, interceptors: diChicken.get( instanceName: 'chickenInterceptor', ), ), ); final dioRemote = diChicken.get(); await dioRemote.init(); diChicken.registerLazySingleton( () => AuthRemoteDataSourceImp(dioRemote), ); diChicken.registerLazySingleton( () => AuthRepositoryImpl(diChicken.get()), ); diChicken.registerLazySingleton( () => ChickenRemoteDatasourceImp(diChicken.get()), ); diChicken.registerLazySingleton( () => ChickenLocalDataSourceImp(), ); diChicken.registerLazySingleton( () => ChickenRepositoryImp( remote: diChicken.get(), local: diChicken.get(), ), ); diChicken.registerLazySingleton( () => PoultryScienceRemoteDatasourceImp(diChicken.get()), ); diChicken.registerLazySingleton( () => PoultryScienceRepositoryImp( diChicken.get(), ), ); //region kill house module DI diChicken.registerLazySingleton( () => KillHouseRemoteDataSourceImpl(diChicken.get()), ); diChicken.registerLazySingleton( () => KillHouseRepositoryImpl( diChicken.get(), ), ); //endregion } Future newSetupAuthDI(String newUrl) async { var tokenService = Get.find(); // همیشه baseUrl جدید رو ذخیره کن await tokenService.saveBaseUrl(Module.chicken, newUrl); // Re-register AppInterceptor if (diChicken.isRegistered( instanceName: 'chickenInterceptor', )) { await diChicken.unregister( instanceName: 'chickenInterceptor', ); } diChicken.registerLazySingleton( () => AppInterceptor( refreshTokenCallback: () async => null, saveTokenCallback: (String newToken) async { // await tokenService.saveAccessToken(newToken); }, clearTokenCallback: () async { await tokenService.deleteModuleTokens(Module.chicken); Get.offAllNamed(ChickenRoutes.auth, arguments: Module.chicken); }, ), instanceName: 'chickenInterceptor', ); // Re-register DioRemote if (diChicken.isRegistered()) { await diChicken.unregister(); } diChicken.registerLazySingleton( () => DioRemote( baseUrl: newUrl, interceptors: diChicken.get( instanceName: 'chickenInterceptor', ), ), ); final dioRemote = diChicken.get(); await dioRemote.init(); // Re-register dependent layers await reRegister( () => AuthRemoteDataSourceImp(dioRemote), ); await reRegister( () => AuthRepositoryImpl(diChicken.get()), ); await reRegister( () => ChickenRemoteDatasourceImp(dioRemote), ); await reRegister(() => ChickenLocalDataSourceImp()); await reRegister( () => ChickenRepositoryImp( remote: diChicken.get(), local: diChicken.get(), ), ); await reRegister( () => PoultryScienceRemoteDatasourceImp(dioRemote), ); await reRegister( () => PoultryScienceRepositoryImp( diChicken.get(), ), ); } Future reRegister(T Function() factory) async { if (diChicken.isRegistered()) { await diChicken.unregister(); } diChicken.registerLazySingleton(factory); } Future removeChickenDI() async { await diChicken.resetScope(); }