initialize static method

Future<void> initialize(
  1. String baseUrl, {
  2. BuildContext? context,
  3. GlobalKey<NavigatorState>? navigatorKey,
})

Initialize dependencies with baseUrl and context

baseUrl - The base URL for API calls (provided by the app) context - BuildContext for showing screens (optional, can use navigatorKey instead) navigatorKey - GlobalKey for Navigator (optional, can use context instead)

Implementation

static Future<void> initialize(
  String baseUrl, {
  BuildContext? context,
  GlobalKey<NavigatorState>? navigatorKey,
}) async {
  // Store context or navigator key for showing screens
  if (context != null) {
    _context = context;
    DebugLogger.log('[DependencyInjection] Context provided for showing screens');
  }
  if (navigatorKey != null) {
    _navigatorKey = navigatorKey;
    DebugLogger.log('[DependencyInjection] Navigator key provided for showing screens');
  }

  DebugLogger.log('[DependencyInjection] Using app-provided baseUrl: $baseUrl');

  // Initialize Dio with logging interceptor
  _dio = Dio(
    BaseOptions(
      baseUrl: baseUrl,
      connectTimeout: const Duration(seconds: 30),
      receiveTimeout: const Duration(seconds: 30),
      headers: {
        'Content-Type': 'application/json',
        'Accept': 'application/json',
      },
    ),
  );

  // Add logging interceptor
  _dio!.interceptors.add(LoggingInterceptor());

  // Initialize data sources
  final authRemoteDataSource = AuthRemoteDataSource(
    dio: _dio!,
    baseUrl: baseUrl,
  );
  _deviceInfoDataSource = DeviceInfoDataSource(HaloAuthPlatform.instance);

  // Initialize repository
  _authRepository = AuthRepositoryImpl(
    remoteDataSource: authRemoteDataSource,
  );

  // Initialize use case
  _authenticateUseCase = AuthenticateUseCase(repository: _authRepository!);
}