inventory / sebn_inventory_app / lib / injection.dart
injection.dart
Raw
import 'dart:io';

import "package:get_it/get_it.dart";
import 'package:connectivity_plus/connectivity_plus.dart';
import 'package:dio/dio.dart';
import 'package:flutter_secure_storage/flutter_secure_storage.dart';
import 'package:moor/moor.dart';

import 'package:sebn_inventory_app/application/auth/auth_bloc.dart';
import 'package:sebn_inventory_app/application/auth/sign_in_form/sign_in_form_bloc.dart';
import 'package:sebn_inventory_app/application/main/bloc/main_bloc.dart';
import 'package:sebn_inventory_app/domain/auth/i_auth_facade.dart';
import 'package:sebn_inventory_app/domain/main/i_inventory_facade.dart';
import 'package:sebn_inventory_app/domain/update/i_update_facade.dart';
import 'package:sebn_inventory_app/infrastructure/core/api_routes.dart';

import 'application/history/bloc/history_bloc.dart';
import 'application/locale/bloc/locale_bloc.dart';
import 'application/main/item_edit/bloc/item_edit_bloc.dart';
import 'application/update/update_bloc.dart';
import 'infrastructure/auth/django_auth_facade.dart';
import 'infrastructure/inventory/django_inventory_facade.dart';
import 'infrastructure/repository/datasources/local_datasource.dart';
import 'infrastructure/repository/repository.dart';
import 'infrastructure/update/django_update_facade.dart';

final GetIt getIt = GetIt.instance;

Future<void> init({required QueryExecutor e, required File file}) async {
  // Bloc
  getIt.registerLazySingleton(
    () => AuthBloc(
      authFacade: getIt(),
      secureStorage: getIt(),
      repository: getIt(),
      dbFile: file,
    ),
  );

  getIt.registerFactory(
    () => LocaleBloc(
      repository: getIt(),
    ),
  );

  getIt.registerFactory(
    () => SignInFormBloc(
      authFacade: getIt(),
      secureStorage: getIt(),
      repository: getIt(),
    ),
  );

  getIt.registerLazySingleton(
    () => MainBloc(
      authBloc: getIt(),
      repository: getIt(),
      authFacade: getIt(),
      inventoryFacade: getIt(),
    ),
  );

  getIt.registerFactory(
    () => ItemEditBloc(
      authBloc: getIt(),
      mainBloc: getIt(),
      inventoryFacade: getIt(),
    ),
  );

  getIt.registerFactory(
    () => HistoryBloc(
      authBloc: getIt(),
      repository: getIt(),
      inventoryFacade: getIt(),
    ),
  );

  getIt.registerFactory(() => UpdateBloc(updateFacade: getIt()));

  // Repository
  getIt.registerLazySingleton<AppRepository>(() => AppRepository(
        localDataSource: getIt(),
      ));

  // Data sources
  getIt.registerLazySingleton<LocalDataSource>(
    () => LocalDatasourceImpl(e: e),
  );
  getIt.registerLazySingleton<IAuthFacade>(
    () => DjangoAuthFacade(djangoAuth: getIt()),
  );
  getIt.registerLazySingleton<IInventoryFacade>(
      () => DjangoInventoryFacade(djangoInventory: getIt()));
  getIt.registerLazySingleton<IUpdateFacade>(() => DjangoUpdateFacade(djangoUpdate: getIt()));

  //! Core
  getIt.registerLazySingleton(() => DjangoAuth(httpClient: getIt(), api: getIt()));
  getIt.registerLazySingleton(() => DjangoUpdate(httpClient: getIt(), api: getIt()));
  getIt.registerLazySingleton(() => DjangoInventory(httpClient: getIt(), api: getIt()));
  getIt.registerLazySingleton(() => const Api());
  //! External
  getIt.registerLazySingleton(() => Dio());
  getIt.registerLazySingleton(() => Connectivity());
  getIt.registerLazySingleton(() => const FlutterSecureStorage());
}