flutter - FlutterBloc 对 Blocs 的初始状态做出反应
问题描述
我怎样才能让我的集团对集团的初始状态做出反应。在示例中,我试图在集团初始状态上记录一些内容,但没有任何反应。它只打印 blocs 构造函数,但不打印 facilityIntial 的打印语句
class FacilityBloc extends Bloc<FacilityEvent, FacilityState> {
FacilityBloc(this.facilityRepository)
: assert(facilityRepository != null),
super(FacilityInitial()) {
print('FacilitBlocConstructed');
}
final FacilityRepository facilityRepository;
@override
Stream<FacilityState> mapEventToState(
FacilityEvent event,
) async* {
print(event);
if (event is FacilityGetAll) {
yield* _mapGetAllFacilityToState(event);
} else if (event is FacilityInitial) {
print('Facility intial state');
}
}
Stream<FacilityState> _mapGetAllFacilityToState(FacilityGetAll event) async* {
yield FacilityLoading();
try {
List<Facility> facilities = await facilityRepository.loadAllFacility();
yield FacilityLoaded(facilities);
} on AppException catch (e) {
yield FacilityError(e.exceptionMessageId);
} catch (e) {
yield FacilityError(LocaleKeys.generalError);
}
}
}
解决方案
如果FacilityInitial
是一个状态,那么这就是您无法在mapEventToState
函数中对其做出反应的原因(在此函数中,您只能对事件做出反应,而不能对状态做出反应)。如果mapEventToState
是一个事件(我不能肯定地说,因为您没有提供该信息)它可能与同名的状态类冲突。
此外,您还没有提供创建 bloc 实例的代码。为了能够对事件做出反应(即使是初始事件),您需要将此事件添加到 bloc。它可能看起来像这样:
BlocProvider<FacilityBloc>(
lazy: false,
create: (context) => FacilityBloc(FacilityRepository())..add(FacilityInitialEvent()),
child: Text("My Text"),
)
在上面的示例中,我明确添加了FacilityInitialEvent
,因此该集团能够处理它。另外,我稍微更改了事件名称,以避免名称冲突。
推荐阅读
- ruby-on-rails - 如何在 ruby on rails 中获取复选框值
- node.js - CastError:对于猫鼬中模型的路径“_id”处的值“findByName”,转换为 ObjectId 失败
- mysql - 带有关联的活动记录查询
- java - 致命异常:调用 Camera.release() 后正在使用 java.lang.RuntimeException 摄像头
- django - 要更改的 Django 查询集值并以纯 txt 副本发送给用户
- mongodb - Mongodb deleteMany,如何节省磁盘使用量?
- ios - AVFoundation 没有读取特定类型的条形码
- c - 将文本文件中的双精度数据复制到 C 中的数组中
- javascript - 使用带有元素 childNodes.length 的 while 循环直到它等于指定的数字不起作用(while 循环无法退出)
- iphone - Htaccess - 将 %23 转换为 #