BlocProvider内部都没有返回值

问题描述

我想使用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(...

可以请您试试吗?