setup function

Future<void> setup({
  1. Environment env = Environment.dev,
})

Implementation

Future<void> setup({Environment env = Environment.dev}) async {
  // Config
  sl.registerSingleton(AppConfig.dev());

  // Core Services
  final navigatorKey = GlobalKey<NavigatorState>();
  sl.registerSingleton(navigatorKey);
  sl.registerSingleton<LogService>(ConsoleLogService());
  sl.registerSingleton<UiService>(AppUiService(navigatorKey));
  sl.registerSingleton<ConnectivityService>(ConnectivityServiceImpl());

  // Storage - Initialize and register synchronously
  final storageService = SharedPreferencesStorageService();
  await storageService.init();
  sl.registerSingleton<StorageService>(storageService);

  // Theme - Initialize and register synchronously
  final themeService = ThemeService();
  await themeService.init();
  sl.registerSingleton<ThemeService>(themeService);

  // Dio and Network
  final dio = Dio(
    BaseOptions(
      baseUrl: sl<AppConfig>().baseUrl,
      connectTimeout: const Duration(seconds: 30),
    ),
  );

  dio.interceptors.addAll([
    ConnectivityInterceptor(),
    LoadingInterceptor(),
    LoggingInterceptor(),
    AuthInterceptor(),
    ErrorInterceptor(),
  ]);

  sl.registerSingleton<NetworkService>(DioNetworkService(dio));
}