【发布时间】:2020-08-20 07:31:50
【问题描述】:
我想使用Either 将结果存储在BlocBuilder 中。根据结果我想显示特定的Widget。但是使用Either 会抛出BlocBuilder 返回null 的异常。我调试了那个代码,fold 分支被正确调用,所以它应该返回Widget。我不明白它怎么会返回null。
代码:
...
else if (state is Loaded) {
final badgeOrFailure = state.profile.getBadgeByOrgId(orgId);
badgeOrFailure.fold((err) {
return MessageDisplay(
message: err.message,
);
}, (badge) {
return BadgeWidget(
desc: badge.desc,
code: badge.code,
);
});
...
个人资料代码:
Either<BadgeNotFoundFailure, Badge> getBadgeByOrgId(int orgId) {
try {
if (badges != null && badges.isNotEmpty) {
return Right(badges.firstWhere((element) => element.orgId == orgId));
} else {
log('badges are empty');
return Left(BadgeNotFoundFailure());
}
} on Exception catch (_) {
return Left(BadgeNotFoundFailure());
}
}
【问题讨论】:
-
请使用
state.profile?.getBadgeByOrgId确保state.profile.是空安全的。您能否分享与此 BLoC 相关的整个代码块,以便我可以尝试分享答案? -
配置文件不为空。我添加了 nullcheck 但结果相同
标签: flutter flutter-bloc