import "package:arcane_framework/arcane_framework.dart"; import "package:dio/dio.dart"; import "package:flutter_secure_storage/flutter_secure_storage.dart"; import "package:get_it/get_it.dart"; abstract class AppInjector { static final GetIt getIt = GetIt.I; static void _registerApis() { getIt.registerSingleton( SetupApi(getIt()), ); } static void _registerHelpers() { getIt.registerSingleton( const FlutterSecureStorage( aOptions: AndroidOptions( encryptedSharedPreferences: true, ), ), ); getIt.registerSingleton( SecureStorageRepository(getIt()), ); getIt.registerLazySingleton( () => AuthorizationInterceptor(), ); getIt.registerLazySingleton( () => DioHelper.createDioInstance(getIt), ); } static Future init() async { Arcane.log( "Initializing injector...", level: Level.info, ); await getIt.reset(); _registerHelpers(); _registerApis(); await getIt.allReady(); await IdService.I.init(); Arcane.log( "Injector initialized.", level: Level.info, ); } static void resetDio() { if (getIt.isRegistered()) { getIt.unregister(); } getIt.registerLazySingleton( () => DioHelper.createDioInstance(getIt), ); } static Future configureAsDebug() async { Arcane.log( "Unregistering production APIs and replacing with Debug versions", level: Level.fatal, ); getIt.unregister(); await getIt.allReady(); getIt.registerSingleton( DebugSecureStorageRepository(), ); final SecureStorageRepository storage = getIt(); getIt.registerSingleton(DebugMyApi(storage)); await getIt.allReady(); } }