我使用的是flutter_bloc,我需要一个与另一个块一起communicate的块-我有一个activityBloc,需要监听authBloc以确定作者是否已通过身份验证并获取用户ID(目的是为了开始根据身份验证的用户ID监听Firestore上的文档更改)。
我正在通过构造函数将依赖对象传递给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();
...
}
我需要将这些暴露给多块提供程序,我如何在多块提供程序中实例化需要将一个块传递给另一个块的块?
谢谢
答案 0 :(得分:0)
您可以通过以下方式将一个集团的实例用于另一个集团。
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(),
);
答案 1 :(得分:-1)
嗨,我不确定flutter_bloc库是否可行,但是您可以使用很棒的提供程序库 https://pub.dev/packages/provider#-installing-tab- 已获得Google的批准(不仅适用于欧盟)
另外,flutter_bloc也正在使用提供程序
有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);