diff --git a/packages/chicken/lib/data/di/chicken_di.dart b/packages/chicken/lib/data/di/chicken_di.dart index 8f23e29..031671e 100644 --- a/packages/chicken/lib/data/di/chicken_di.dart +++ b/packages/chicken/lib/data/di/chicken_di.dart @@ -68,63 +68,59 @@ Future setupChickenDI() async { } Future newSetupAuthDI(String newUrl) async { - tLog("setup 2"); var tokenService = Get.find(); - if (tokenService.baseurl.value == null) { - await tokenService.saveBaseUrl(newUrl); - } + // همیشه baseUrl جدید رو ذخیره کن + await tokenService.saveBaseUrl(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.deleteTokens(); + 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(); } + diChicken.registerLazySingleton( + () => DioRemote( + baseUrl: newUrl, + interceptors: diChicken.get(instanceName: 'chickenInterceptor'), + ), + ); + final dioRemote = diChicken.get(); + await dioRemote.init(); - if (diChicken.isRegistered()) { - await diChicken.unregister(); - diChicken.registerLazySingleton( - () => AuthRemoteDataSourceImp(diChicken.get()), - ); - } - - if (diChicken.isRegistered()) { - await diChicken.unregister(); - diChicken.registerLazySingleton( - () => AuthRepositoryImpl(diChicken.get()), - ); - } - - if (diChicken.isRegistered()) { - await diChicken.unregister(); - diChicken.registerLazySingleton( - () => ChickenRemoteDatasourceImp(diChicken.get()), - ); - } - - if (diChicken.isRegistered()) { - await diChicken.unregister(); - diChicken.registerLazySingleton(() => ChickenLocalDataSourceImp()); - } - - if (diChicken.isRegistered()) { - await diChicken.unregister(); - diChicken.registerLazySingleton( - () => ChickenRepositoryImp( - remote: diChicken.get(), - local: diChicken.get(), - ), - ); - } + // 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(), + )); } - - +Future reRegister(T Function() factory) async { + if (diChicken.isRegistered()) { + await diChicken.unregister(); + } + diChicken.registerLazySingleton(factory); +} Future removeChickenDI() async { if (diChicken.isRegistered()) { diChicken.unregister();