如何在Angle Dart中创建异步提供程序

时间:2020-10-22 13:38:20

标签: angular dart hive bloc

大家好,我想使用angular dart提供程序向我的应用程序注入bloc依赖项。 我还将蜂巢用作本地数据存储。 所以我有几个bloc,它们使用使用蜂巢盒的服务。 我不能使用

/// useClass -> [ClassProvider]
/// useValue -> [ValueProvider]
/// useFactory -> [FactoryProvider]
/// useExisting -> [ExistingProvider]

因为它需要常量值。我也尝试过runAppAsync

这是我要注入的get_it区块

inal sl = GetIt.instance;
String googleApiKey = "";
String host = "192.168.0.101";

init() async {
  sl.registerLazySingleton<Dio>(() {
    final dio = Dio();

    return dio;
  });

//  Hive.init();
  Hive.registerAdapter(SearchAddressAdapter());
  Hive.registerAdapter(ProductInCartAdapter());
  Hive.registerAdapter(ShopLocationAdapter());

  sl.registerSingletonAsync<Box>(() => Hive.openBox<SearchAddress>("address"));
  sl.registerSingleton<LocalAddressRepository>(
      HiveAddressRepositoryImpl(await sl.getAsync<Box>()));
  sl.registerSingleton<ExternalAddressRepository>(
      ExternalAddressRepositoryImpl(sl<Dio>()));
  sl.registerSingleton<AddressService>(AddressService(
      GetIt.I<ExternalAddressRepository>(),
      GetIt.I<LocalAddressRepository>(),
      googleApiKey));
  sl.registerSingleton<LocationService>(LocationServiceWeb());

  sl.registerSingleton<ShopRepository>(ShopRepositoryImpl(sl<Dio>()));
  sl.registerSingleton<ShopService>(ShopService(GetIt.I<ShopRepository>()));
  sl.registerSingleton<ProductRepository>(ProductRepositoryImpl(sl<Dio>()));
  sl.registerSingleton<ProductService>(
      ProductService(GetIt.I<ProductRepository>()));

  sl.registerSingleton<OpeningHoursRepository>(
      OpeningHoursRepositoryImpl(sl<Dio>()));
  sl.registerSingleton<OpeningHoursService>(
      OpeningHoursService(GetIt.I<OpeningHoursRepository>()));
}

然后我想注入这个Bloc。接下来的代码来自flutter

providers: [
        BlocProvider<AddressPickerBloc>(
            create: (BuildContext context) =>
                AddressPickerBloc(GetIt.I<AddressService>())),
        BlocProvider<AddressBloc>(
            create: (BuildContext context) => AddressBloc(
                GetIt.I<AddressService>(), GetIt.I<LocationService>())
              ..add(LoadAddressEvent())),
        BlocProvider<ShopBloc>(
          create: (BuildContext context) =>
              ShopBloc(GetIt.I<ShopService>(), context.bloc<AddressBloc>()),
        ),
        BlocProvider<ProductBloc>(
          create: (BuildContext context) =>
              ProductBloc(GetIt.I<ProductService>(), context.bloc<ShopBloc>()),
        ),
        BlocProvider<OpeningHoursBloc>(
          create: (BuildContext context) => OpeningHoursBloc(
              GetIt.I<OpeningHoursService>(), context.bloc<ShopBloc>()),
        )
      ],

0 个答案:

没有答案