I am stuck at this exception .
I am trying to create a Number Trivia app based on course on you tube
basically i'm handling errors and exceptions with Either class from dartz library;
on<ConcreteNumberTriviaGottenEvent>((event, emit) async {
emit(NumberTriviaLoadingState());
final number =
InputConverter.convertStringToUnsignedInteger(event.numberString);
print(number);
number.fold((numberFailure) => emit(Error(message: failMessage(numberFailure))), (numberInt) async {
final either = await concreteTriviaUseCase.exec(numberInt);
either!.fold((serverFailure) => emit(Error(message: failMessage(serverFailure))),
(numberTrivia) => emit(NumberTriviaLoadedState(numberTrivia: numberTrivia)));
});
});
so basically the string number comes from event and get passed to a static method from class InputConversion which return an Either<Failure,int> . i execute a fold on the returned value emitting Error state in the case of Left aka Failure and for Right i get the NumberTrivia from api using returned int . api also returns an Either which i fold on again but it throws the following exception
E/flutter ( 6066): emit was called after an event handler completed normally.
E/flutter ( 6066): This is usually due to an unawaited future in an event handler.
E/flutter ( 6066): Please make sure to await all asynchronous operations with event handlers
E/flutter ( 6066): and use emit.isDone after asynchronous operations before calling emit() to
E/flutter ( 6066): ensure the event handler has not completed.
The solution is to place an await before number.fold:
await number.fold((numberFailure) => emit(Error(message: failMessage(numberFailure))), (numberInt) async {
I got stuck in the same spot on the same tutorial and this dicussion helped me figure out what's wrong: https://github.com/felangel/bloc/issues/2784