2

我正在使用 flutter_bloc 并且我需要一个 bloc与另一个 bloc通信- 我有一个 activityBloc 需要监听 authBloc 以确定作者是否经过身份验证并获取用户 ID(目的是开始监听 firestore 上的文档更改基于来自身份验证的用户 ID)。

我通过构造函数将依赖对象传递给activityBloc。

class ActivityBloc extends Bloc<ActivityEvent, ActivityState> {
  final AuthBloc authBloc;
  final ActivityRepository repo;
  StreamSubscription authSubscription;
  StreamSubscription activitySubscription;
  String id; // userid
  int limit = 10;

  ActivityBloc({this.authBloc, this.repo}) {
    id = "";

    authSubscription = authBloc.listen((state) {
      if (state is AuthenticatedState) {
        id = state.user.uid;
        ...
          });
        });
      }
    });
  }

  @override
  ActivityState get initialState => ActivityInitial();
...
}

我需要在 multibloc 提供程序中公开这些,我如何能够在需要将一个 bloc 传递到另一个 bloc 的 multibloc 提供程序中实例化这些 bloc?

谢谢

4

2 回答 2

7

您可以按照以下方式将一个集团的实例用于另一个集团。

return MultiBlocProvider(
  providers: [
    BlocProvider<AuthBloc>(
      create: (BuildContext context) => AuthBloc(),
    ),
    BlocProvider<ActivityBloc>(
      create: (BuildContext context) => ActivityBloc(
        authBloc: BlocProvider.of<AuthBloc>(context),
        repo: /// instance of your activity repository,
      ),
    ),
  ],
  child: App(),
);
于 2020-11-02T15:59:48.093 回答
-2

嗨,我不确定是否可以使用 flutter_bloc 库,但您可以使用很棒的提供程序库 https://pub.dev/packages/provider#-installing-tab- 它已获得 Google 的批准(不仅适用于 bloc)

此外,flutter_bloc 也在使用 Provider

有 ProxyProvider,我不确定你有什么权限给你 flutter_bloc 库,因为你需要的一切都可以在没有它的情况下完成,而我只使用提供程序库

这是可以解决您的问题的代码,有关如何与提供商合作的更多信息,请查看https://pub.dev/packages/provider

MultiProvider(
  providers: [
    Provider<AuthBloc>(
      create: (_) => AuthBloc(),
      dispose: (_, bloc) => bloc.dispose(),
    ),
    ProxyProvider<AuthBloc,ActivityBloc>(
    create: (_) => ActivityBloc(),
    update: (_, authBloc, bloc) => bloc..authBloc = authBloc, //insert authBloc to ActivityBloc
    dispose: (_, bloc) => bloc.dispose(),
    ),
  )
  ],
  child: App(),
)

然后访问 App 小部件内的任何提供程序

@override Widget build(BuildContext context) {
final bloc = Provider.of<ActivityBloc>(context);
于 2020-04-28T21:47:09.743 回答