init function

Future<void> init()

Implementation

Future<void> init() async {
  if (_diInitialized) return;

  //Bloc
  sl.registerFactory(
    () => AuthBloc(
      storeLoginUseCase: sl(),
      loginUseCase: sl(),
      getOnboardingUseCase: sl(),
      getClientUseCase: sl(),
      checkCodeUseCase: sl(),
      forgetPasswordUseCase: sl(),
      registerUseCase: sl(),
      resendVerifyEmailUseCase: sl(),
      resetPasswordUseCase: sl(),
      verifyEmailUseCase: sl(),
      socialiteAuthUseCase: sl(),
      externalAuthUseCase: sl(),
      logoutUseCase: sl(),
      getPagesUseCase: sl(),
    ),
  );

  sl.registerFactory(
    () => PrivilegesBloc(
      getCartridgesUseCase: sl(),
      getPartnerByIdUseCase: sl(),
      getPartnerCategoryUseCase: sl(),
      getPartnersUseCase: sl(),
      searchPartnersUseCase: sl(),
      subscribeUsesCase: sl(),
    ),
  );

  sl.registerFactory(
    () => ProfileBloc(
      getClientUseCase: sl(),
      updateClientUseCase: sl(),
      getPromotionPassUseCase: sl(),
      getPromotionUseCase: sl(),
      deleteAccountUseCase: sl(),
      logoutUseCase: sl(),
      subscribeUsesCase: sl(),
      unsubscribeUsesCase: sl(),
      getOrdersUseCase: sl(),
    ),
  );

  sl.registerFactory(
    () => SettingBloc(
      getPagesUseCase: sl(),
    ),
  );

  sl.registerFactory(
    () => SubscriptionBloc(
      scanPromotionUsesCase: sl(),
      subscribeUsesCase: sl(),
      unsubscribeUsesCase: sl(),
    ),
  );

  sl.registerFactory(
    () => VouchersBloc(
      getArticlesUseCase: sl(),
      getPartnerCategoryUseCase: sl(),
      getArticlesListUseCase: sl(),
      buyOrderUseCase: sl(),
    ),
  );

  sl.registerFactory(
    () => TicketOfficeBloc(
      getTicketOfficeUseCase: sl(),
      getPartnerCategoryUseCase: sl(),
      getTicketOfficesIdUseCase: sl(),
      getSubGenderOffersCase: sl(),
      ticketOfficeBuyOrderUseCase: sl(),
    ),
  );

  //UseCase
  sl.registerFactory(() => StoreLoginUseCase(repository: sl()));
  sl.registerFactory(() => LoginUseCase(repository: sl()));
  sl.registerFactory(() => GetOnboardingUseCase(repository: sl()));
  sl.registerFactory(() => CheckCodeUseCase(repository: sl()));
  sl.registerFactory(() => ForgetPasswordUseCase(repository: sl()));
  sl.registerFactory(() => DeleteAccountUseCase(repository: sl()));
  sl.registerFactory(() => LogoutUseCase(repository: sl()));
  sl.registerFactory(() => RegisterUseCase(repository: sl()));
  sl.registerFactory(() => ResendVerifyEmailUseCase(repository: sl()));
  sl.registerFactory(() => ResetPasswordUseCase(repository: sl()));
  sl.registerFactory(() => SocialiteAuthUseCase(repository: sl()));
  sl.registerFactory(() => ExternalAuthUseCase(repository: sl()));
  sl.registerFactory(() => VerifyEmailUseCase(repository: sl()));

  sl.registerFactory(() => GetCartridgesUseCase(repository: sl()));
  sl.registerFactory(() => GetPrivilegesByIdUseCase(repository: sl()));
  sl.registerFactory(() => GetPrivilegesCategoryUseCase(repository: sl()));
  sl.registerFactory(() => GetPrivilegesUseCase(repository: sl()));
  sl.registerFactory(() => SearchPartnersUseCase(repository: sl()));

  sl.registerFactory(() => GetClientUseCase(repository: sl()));
  sl.registerFactory(() => UpdateClientUseCase(repository: sl()));
  sl.registerFactory(() => GetPromotionPassUseCase(repository: sl()));
  sl.registerFactory(() => GetPromotionUseCase(repository: sl()));

  sl.registerFactory(() => ScanPromotionUsesCase(repository: sl()));
  sl.registerFactory(() => SubscribeUsesCase(repository: sl()));
  sl.registerFactory(() => UnsubscribeUsesCase(repository: sl()));

  sl.registerFactory(() => GetPagesUseCase(repository: sl()));

  sl.registerFactory(() => GetArticlesListUseCase(repository: sl()));
  sl.registerFactory(() => VouchersBuyOrderUseCase(repository: sl()));
  sl.registerFactory(() => GetOrdersUseCase(repository: sl()));
  sl.registerFactory(() => GetArticlesUseCase(repository: sl()));

  sl.registerFactory(() => GetTicketOfficeUseCase(repository: sl()));
  sl.registerFactory(() => GetTicketOfficesIdUseCase(repository: sl()));
  sl.registerFactory(() => GetSubGenderOffersCase(repository: sl()));
  sl.registerFactory(() => TicketOfficeBuyOrderUseCase(repository: sl()));

  // Repository
  sl.registerFactory<AuthRepository>(
      () => AuthRepositoryImpl(networkInfo: sl(), authRemoteDataSource: sl()));
  sl.registerFactory<ProfileRepository>(() => ProfileRepositoryImpl(
        networkInfo: sl(),
        profileRemoteDataSource: sl(),
      ));
  sl.registerFactory<PrivilegesRepository>(() => PrivilegesRepositoryImpl(
      networkInfo: sl(), partnerRemoteDataSource: sl()));
  sl.registerFactory<SettingRepository>(() => SettingRepositoryImpl(
        networkInfo: sl(),
        settingRemoteDataSource: sl(),
      ));
  sl.registerFactory<SubscriptionRepository>(() => SubscriptionRepositoryImpl(
        networkInfo: sl(),
        subscriptionRemoteDataSource: sl(),
      ));
  sl.registerFactory<VouchersRepository>(() => VouchersRepositoryImpl(
        networkInfo: sl(),
        vouchersRemoteDataSource: sl(),
      ));
  sl.registerFactory<TicketOfficeRepository>(() => TicketOfficeRepositoryImpl(
        networkInfo: sl(),
        ticketOfficeRemoteDataSource: sl(),
      ));

  // Api Client
  sl.registerFactory(() => ApiClient());
  sl.registerFactory(() => StoreApiClient());

  // DataSources
  sl.registerFactory<AuthRemoteDataSource>(
      () => AuthRemoteDataSourceImpl(prefUtils: sl(), apiClient: sl()));
  sl.registerFactory<ProfileRemoteDataSource>(
      () => ProfileRemoteDataSourceImpl(prefUtils: sl(), apiClient: sl()));
  sl.registerFactory<PrivilegesRemoteDataSource>(
      () => PrivilegesRemoteDataSourceImpl(apiClient: sl()));
  sl.registerFactory<SettingRemoteDataSource>(
      () => SettingRemoteDataSourceImpl(apiClient: sl()));
  sl.registerFactory<SubscriptionRemoteDataSource>(
      () => SubscriptionRemoteDataSourceImpl(apiClient: sl()));
  sl.registerFactory<VouchersRemoteDataSource>(
      () => VouchersRemoteDataSourceImpl(apiClient: sl()));
  sl.registerFactory<TicketOfficeRemoteDataSource>(
      () => TicketOfficeRemoteDataSourceImpl(apiClient: sl()));

  //! Core
  sl.registerFactory<NetworkInfo>(() => NetworkInfoImpl(sl()));

  //! External
  sl.registerFactory(() => http.Client());
  sl.registerFactory(() => InternetConnectionChecker());
  final sharedPreferences = await SharedPreferences.getInstance();
  sl.registerFactory(() => sharedPreferences);
  sl.registerFactory<PrefUtils>(() => PrefUtilsImpl(sharedPreferences: sl()));

  _diInitialized = true;
}