BlocProvider内部都没有返回值

时间:2020-08-20 07:31:50

标签: flutter flutter-bloc

我想使用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());
    }
  }

1 个答案:

答案 0 :(得分:0)

我认为您需要一个明确的return,例如
return badgeOrFailure.fold(...

可以请您试试吗?