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(); }