setupLocator function

Future<void> setupLocator(
  1. String token
)

Implementation

Future<void> setupLocator(String token) async {
  final dio = createDio(token);
  getIt.registerLazySingleton<Dio>(() => dio);

  getIt.registerLazySingleton<Storage>(() => Storage());

  getIt.registerLazySingleton<AppRouter>(
      () => AppRouter(storage: getIt<Storage>()));

  final projectService = ProjectService(dio);
  getIt.registerLazySingleton<ProjectService>(() => projectService);

  // Register Hive Boxes
  final taskBox = await Hive.openBox<TaskModelResponse>('tasks');
  final projectBox = await Hive.openBox<ProjectModelResponse>('projects');
  final syncBox = await Hive.openBox<SyncOperation>('sync');
  final durationBox = await Hive.openBox<DurationModel>('duration');
  final dueBox = await Hive.openBox<DueModel>('due');
  final commentBox = await Hive.openBox<CommentModel>('comment');
  final attachmentBox = await Hive.openBox<AttachmentModel>('attachment');

  getIt.registerSingleton<Box<TaskModelResponse>>(taskBox);
  getIt.registerSingleton<Box<ProjectModelResponse>>(projectBox);
  getIt.registerSingleton<Box<SyncOperation>>(syncBox);
  getIt.registerSingleton<Box<DurationModel>>(durationBox);
  getIt.registerSingleton<Box<DueModel>>(dueBox);
  getIt.registerSingleton<Box<CommentModel>>(commentBox);
  getIt.registerSingleton<Box<AttachmentModel>>(attachmentBox);

  getIt.registerSingleton<ProjectProvider>(ProjectProviderImpl());

  // Register data sources
  //register data sources
  getIt.registerLazySingleton<ProjectsRemoteDataSource>(
      () => ProjectsRemoteDataSourceImpl(getIt()));

  getIt.registerLazySingleton<TasksRemoteDataSource>(
    () => TasksRemoteDataSourceImpl(
      service: getIt<ProjectService>(),
    ),
  );

  // Register Local Data Sources
  getIt.registerLazySingleton<TasksLocalDataSource>(
      () => TasksLocalDataSourceImpl(getIt()));
  getIt.registerLazySingleton<ProjectsLocalDataSource>(
      () => ProjectsLocalDataSourceImpl(getIt()));
  getIt.registerLazySingleton<SyncLocalDataSource>(
      () => SyncLocalDataSource(getIt()));

  //register repositories
  getIt.registerSingleton<Connectivity>(Connectivity());

  getIt.registerLazySingleton<ProjectsRepository>(() => ProjectsRepositoryImpl(
        remoteDataSource: getIt<ProjectsRemoteDataSource>(),
        localDataSource: getIt<ProjectsLocalDataSource>(),
        syncQueue: getIt<SyncLocalDataSource>(),
      ));

  getIt.registerLazySingleton<TasksRepository>(
    () => TasksRepositoryImpl(
        remoteDataSource: getIt<TasksRemoteDataSource>(),
        localDataSource: getIt(),
        syncQueue: getIt()),
  );
  getIt.registerLazySingleton<CommentsRepository>(
    () => CommentsRepositoryImpl(
        remoteDataSource: getIt<CommentsRemoteDataSource>()),
  );
  getIt.registerLazySingleton<CommentsRemoteDataSource>(
    () => CommentsRemoteDataSourceImpl(
      getIt<ProjectService>(),
    ),
  );
  getIt.registerLazySingleton(() => SyncManager(
        syncQueue: getIt<SyncLocalDataSource>(),
        projectsRemoteDataSource: getIt<ProjectsRemoteDataSource>(),
        tasksRemoteDataSource: getIt<TasksRemoteDataSource>(),
        projectsLocalDataSource: getIt(),
        tasksLocalDataSource: getIt(),
      ));

  // Register use cases
  //register use cases
  getIt.registerLazySingleton<GetProjectsUseCase>(
      () => GetProjectsUseCase(getIt<ProjectsRepository>()));

  getIt.registerLazySingleton<CreateProjectUseCase>(
    () => CreateProjectUseCase(getIt<ProjectsRepository>()),
  );

  getIt.registerLazySingleton<GetTasksUseCase>(
    () => GetTasksUseCase(getIt<TasksRepository>()),
  );

  getIt.registerLazySingleton<DeleteProjectUseCase>(
    () => DeleteProjectUseCase(getIt<ProjectsRepository>()),
  );

  getIt.registerLazySingleton<CreateTaskUseCase>(
    () => CreateTaskUseCase(getIt<TasksRepository>()),
  );

  getIt.registerLazySingleton<DeleteTaskUseCase>(
    () => DeleteTaskUseCase(getIt<TasksRepository>()),
  );

  getIt.registerLazySingleton<CloseTaskUseCase>(
    () => CloseTaskUseCase(getIt<TasksRepository>()),
  );

  getIt.registerLazySingleton<UpdateTaskUseCase>(
    () => UpdateTaskUseCase(getIt<TasksRepository>()),
  );

  getIt.registerLazySingleton<GetAllCommentsUseCase>(
    () => GetAllCommentsUseCase(getIt<CommentsRepository>()),
  );

  getIt.registerLazySingleton<GetTaskUseCase>(
    () => GetTaskUseCase(getIt<TasksRepository>()),
  );

  getIt.registerLazySingleton<CreateCommentUseCase>(
    () => CreateCommentUseCase(getIt<CommentsRepository>()),
  );

  //register blocs
  getIt.registerFactory<ProjectsBloc>(
    () => ProjectsBloc(
        createProjectUseCase: getIt<CreateProjectUseCase>(),
        getProjectsUseCase: getIt<GetProjectsUseCase>(),
        deleteUseCase: getIt<DeleteProjectUseCase>()),
  );

  getIt.registerFactory<TasksBloc>(
    () => TasksBloc(
        getTasksUseCase: getIt<GetTasksUseCase>(),
        updateTaskUseCase: getIt<UpdateTaskUseCase>(),
        deleteTaskUseCase: getIt<DeleteTaskUseCase>()),
  );

  getIt.registerFactory<UpdateTaskBloc>(() => UpdateTaskBloc(
      updateTaskUseCase: getIt<UpdateTaskUseCase>(),
      getTaskUseCase: getIt<GetTaskUseCase>()));

  getIt.registerFactory<CreateTaskBloc>(() => CreateTaskBloc(
        createTaskUseCase: getIt<CreateTaskUseCase>(),
        getProjectsUseCase: getIt<GetProjectsUseCase>(),
      ));

  getIt.registerFactory<CommentBloc>(() => CommentBloc(
        getAllCommentsUseCase: getIt<GetAllCommentsUseCase>(),
        createCommentUseCase: getIt<CreateCommentUseCase>(),
      ));
}