问题描述
我想使用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());
}
}
解决方法
我认为您需要一个明确的return
,例如return badgeOrFailure.fold(...
可以请您试试吗?