import 'package:get_it/get_it.dart'; import 'package:supabase_flutter/supabase_flutter.dart'; import 'package:tugas_akhir_supabase/core/constants/app_constants.dart'; import 'package:tugas_akhir_supabase/data/repositories/crop_schedule_repository_impl.dart'; import 'package:tugas_akhir_supabase/data/repositories/field_repository_impl.dart'; import 'package:tugas_akhir_supabase/domain/repositories/crop_schedule_repository.dart'; import 'package:tugas_akhir_supabase/domain/repositories/field_repository.dart'; import 'package:tugas_akhir_supabase/domain/usecases/field_usecases.dart'; import 'package:tugas_akhir_supabase/domain/usecases/get_schedules.dart'; import 'package:tugas_akhir_supabase/presentation/blocs/crop_schedule/crop_schedule_bloc.dart'; import 'package:tugas_akhir_supabase/presentation/blocs/field/field_bloc.dart'; import 'package:tugas_akhir_supabase/services/auth_services.dart'; final sl = GetIt.instance; Future initServiceLocator() async { // External dependencies final supabase = Supabase.instance.client; sl.registerLazySingleton(() => supabase); // Core // Services sl.registerLazySingleton(() => AuthServices()); // Data sources // Repositories sl.registerLazySingleton( () => CropScheduleRepositoryImpl(supabaseClient: sl()), ); sl.registerLazySingleton( () => FieldRepositoryImpl(supabaseClient: sl()), ); // Use cases - Crop Schedule sl.registerLazySingleton(() => GetSchedules(sl())); sl.registerLazySingleton(() => GetActiveSchedule(sl())); sl.registerLazySingleton(() => CreateSchedule(sl())); sl.registerLazySingleton(() => UpdateSchedule(sl())); sl.registerLazySingleton(() => DeleteSchedule(sl())); // Use cases - Field sl.registerLazySingleton(() => GetFields(sl())); sl.registerLazySingleton(() => CreateField(sl())); sl.registerLazySingleton(() => UpdateField(sl())); sl.registerLazySingleton(() => DeleteField(sl())); // Blocs sl.registerFactory( () => CropScheduleBloc( getSchedules: sl(), getActiveSchedule: sl(), createSchedule: sl(), updateSchedule: sl(), deleteSchedule: sl(), ), ); sl.registerFactory( () => FieldBloc( getFields: sl(), createField: sl(), updateField: sl(), deleteField: sl(), ), ); }