initializeDependencies function
Future<void>
initializeDependencies()
Implementation
Future<void> initializeDependencies() async {
// Isar Service - Clean Architecture compliant
final isarService = IsarService();
await isarService.initialize([
ProjectModelSchema,
AppSettingsModelSchema,
UserProfileModelSchema,
ComponentModelSchema,
AppPreferencesDtoSchema,
OnboardingStatusDtoSchema,
]);
sl.registerSingleton<IsarService>(isarService);
// Register Isar instance for legacy code
final isar = isarService.instance;
if (isar != null) {
sl.registerSingleton<Isar>(isar);
}
// Repositories
sl.registerSingleton<ProjectLocalDataSource>(
ProjectLocalDataSourceImpl(sl()));
sl.registerSingleton<ProjectRepository>(ProjectRepositoryImpl(sl()));
sl.registerSingleton<SettingsRepository>(SettingsRepositoryImpl(sl()));
sl.registerSingleton<UserProfileRepository>(UserProfileRepositoryImpl(sl()));
// Component Feature - DataSource already implements repository interface
sl.registerSingleton<ComponentRepository>(ComponentLocalDataSource(sl()));
// Register SharedPreferences as singleton (needed for AppStateCubit)
final prefs = await SharedPreferences.getInstance();
sl.registerSingleton<SharedPreferences>(prefs);
// Core Use Cases
sl.registerLazySingleton<InitializeAppUseCase>(
() => InitializeAppUseCase(
componentRepository: sl(),
prefs: sl(),
),
);
// Settings Feature Use Cases
sl.registerLazySingleton(() => GetUserProfile(sl()));
sl.registerLazySingleton(() => SaveUserProfile(sl()));
sl.registerLazySingleton(() => UpdateProfilePhoto(sl()));
sl.registerLazySingleton(() => UpdateCompanyLogo(sl()));
// Onboarding Use Cases
sl.registerLazySingleton(() => SaveOnboardingDataUseCase(sl()));
// Dio
sl.registerSingleton<Dio>(Dio());
// Diagram Feature
// Data Sources
sl.registerLazySingleton<CablePresetsDataSource>(
() => CablePresetsDataSourceImpl());
sl.registerLazySingleton<ProtectionPresetsDataSource>(
() => ProtectionPresetsDataSourceImpl());
// Repositories
sl.registerLazySingleton<DiagramRepository>(() => DiagramRepositoryImpl(
cablePresetsDataSource: sl(),
protectionPresetsDataSource: sl(),
));
// Use Cases
sl.registerLazySingleton(() => CalculateDiagramUseCase());
sl.registerLazySingleton(() => ValidateDiagramUseCase());
sl.registerLazySingleton(() => AddChildNodeUseCase());
sl.registerLazySingleton(() => UpdateNodeUseCase());
// Blocs
sl.registerFactory(() => DiagramCubit(
calculateDiagramUseCase: sl(),
validateDiagramUseCase: sl(),
addChildNodeUseCase: sl(),
updateNodeUseCase: sl(),
));
sl.registerFactory(() => ComponentLibraryCubit(sl()));
// Settings Feature Cubits
sl.registerFactory(() => UserProfileCubit(
getUserProfile: sl(),
saveUserProfile: sl(),
updateProfilePhoto: sl(),
updateCompanyLogo: sl(),
));
// Health Feature
sl.registerFactory(() => HealthBloc(diagramCubit: sl()));
// Budget Feature
sl.registerSingleton<PriceRepository>(MockPriceRepository());
sl.registerLazySingleton<MaterialAggregatorService>(
() => MaterialAggregatorService(componentRepository: sl()));
sl.registerLazySingleton<PricingEngine>(
() => PricingEngine(sl(), aggregator: sl()));
sl.registerFactory(() => BudgetCubit(sl()));
// Onboarding Feature
sl.registerFactory(() => OnboardingCubit(saveDataUseCase: sl()));
// Core Cubits
sl.registerFactory<AppStateCubit>(
() => AppStateCubit(
initializeAppUseCase: sl(),
prefs: sl(),
),
);
}