From 0a7e1cd2d41dd24379427b152adbff46616020c3 Mon Sep 17 00:00:00 2001 From: qzl Date: Wed, 25 Feb 2026 15:11:25 +0800 Subject: [PATCH] feat(apps): add dependency injection configuration --- apps/lib/core/config/env.dart | 6 ++++ apps/lib/core/di/injection.dart | 52 +++++++++++++++++++++++++++++++++ 2 files changed, 58 insertions(+) create mode 100644 apps/lib/core/config/env.dart create mode 100644 apps/lib/core/di/injection.dart diff --git a/apps/lib/core/config/env.dart b/apps/lib/core/config/env.dart new file mode 100644 index 0000000..8267e2f --- /dev/null +++ b/apps/lib/core/config/env.dart @@ -0,0 +1,6 @@ +class Env { + static String get apiUrl { + const url = String.fromEnvironment('API_URL'); + return url.isNotEmpty ? url : 'http://localhost:8000'; + } +} diff --git a/apps/lib/core/di/injection.dart b/apps/lib/core/di/injection.dart new file mode 100644 index 0000000..6fb9452 --- /dev/null +++ b/apps/lib/core/di/injection.dart @@ -0,0 +1,52 @@ +import 'package:dio/dio.dart'; +import 'package:flutter_secure_storage/flutter_secure_storage.dart'; +import 'package:get_it/get_it.dart'; +import '../api/api_client.dart'; +import '../storage/token_storage.dart'; +import '../config/env.dart'; +import '../../features/auth/data/auth_api.dart'; +import '../../features/auth/data/auth_repository.dart'; +import '../../features/auth/data/auth_repository_impl.dart'; +import '../../features/auth/presentation/bloc/auth_bloc.dart'; + +final sl = GetIt.instance; + +Future configureDependencies() async { + final dio = Dio(BaseOptions(baseUrl: Env.apiUrl)); + final secureStorage = const FlutterSecureStorage(); + final tokenStorage = SecureTokenStorage(secureStorage); + + sl.registerSingleton(dio); + sl.registerSingleton(secureStorage); + sl.registerSingleton(tokenStorage); + + final authApi = AuthApi( + ApiClient(baseUrl: Env.apiUrl, tokenStorage: tokenStorage, dio: dio), + ); + sl.registerSingleton(authApi); + + final authRepository = AuthRepositoryImpl( + api: authApi, + tokenStorage: tokenStorage, + ); + sl.registerSingleton(authRepository); + + sl.unregister(); + sl.registerSingleton( + ApiClient( + baseUrl: Env.apiUrl, + tokenStorage: tokenStorage, + dio: dio, + refreshToken: (token) async { + try { + await authRepository.refresh(token); + return true; + } catch (_) { + return false; + } + }, + ), + ); + + sl.registerSingleton(AuthBloc(authRepository)); +}