我有一个奇怪的问题,我花了几个小时。我有一个 bloc 文件,我在其中使用 dartZ 来更轻松地维护错误。当我像这样使用 bloc 时:
NumberTriviaBloc({required this.getConcreteNumberTrivia}) : super(Empty()) {
on<GetTriviaForConcreteNumber>((event, emit) async {
final inputEither =
inputConverter.stringToUnsignedInteger(event.numberString);
inputEither.fold((failure) => emit(Error(message: invalidInputMessage)),
(integer) async {
emit(Loading());
final failureOrTrivia =
await getConcreteNumberTrivia(Params(number: integer));
emit(
failureOrTrivia.fold(
(failure) => Error(message: _mapFailureToMessage(failure)),
(trivia) => Loaded(trivia: trivia),
),
);
});
});
}
我收到错误消息,说我没有等待一些 Future - https://pastebin.com/FWTFKYVH但这似乎不是真的,因为我只有一个 getConcreteNumberTrivia
返回 Future 的函数,它正在等待中。
但是当我被切断最后一次发射以分离这样的功能时:
void _eitherLoadedOrErrorState(
Either<Failure, NumberTrivia> failureOrTrivia,
) {
emit(
failureOrTrivia.fold(
(failure) => Error(message: _mapFailureToMessage(failure)),
(trivia) => Loaded(trivia: trivia),
),
);
}
代码开始正常工作。我不明白,我只是将代码移动到 void 函数,它没有做任何额外的事情,有人可以解释我为什么吗?