【问题标题】:flutter -bloc - how to resolve Failed Assertion : !_isCompleteflutter -bloc - 如何解决失败的断言:!_isComplete
【发布时间】:2021-12-03 04:20:51
【问题描述】:

我被这个例外困住了。

我正在尝试根据你管上的课程创建一个 Number Trivia 应用程序

基本上我正在使用 dartz 库中的 Either 类处理错误和异常;

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)));
    
    
  });
});

所以基本上字符串编号来自事件并从类 InputConversion 传递给一个静态方法,该方法返回一个 Either 。在 Left aka Failure 的情况下,我对返回的值执行折叠,发出 Error 状态,对于 Right 我使用返回的 int 从 api 获取 NumberTrivia。 api 还返回一个 Either 我再次折叠但它抛出以下异常


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.

【问题讨论】:

  • 我知道我应该等待 smt 但我不知道要等待什么 -
  • 我可以使用一些硬编码整数和删除转换部分来传递错误。
  • 请问您是如何解决这个问题的。我也面临同样的问题。

标签: flutter bloc flutter-bloc either dartz


【解决方案1】:

解决方法是在 number.fold 之前放置一个 await:

await number.fold((numberFailure) => emit(Error(message: failMessage(numberFailure))), (numberInt) async {

我在同一个教程的同一个地方卡住了,这个讨论帮助我找出了问题所在:https://github.com/felangel/bloc/issues/2784

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-07-24
    • 1970-01-01
    • 2021-09-24
    • 2020-09-28
    • 2021-12-19
    • 2018-10-11
    • 1970-01-01
    相关资源
    最近更新 更多