flutter 如何使用BLoC处理错误?

uqdfh47h  于 2023-05-19  发布在  Flutter
关注(0)|答案(1)|浏览(156)

我看到人们使用onError只是为了调试。我想我可以用它来发出新的状态,比如emit(ErrorState(message: "An error"))。但是对于新版本的bloc package,我们应该使用提供给处理程序的发射器,而不应该直接使用专用函数emit
目前,我在所有的事件处理程序中都有try/catch块。如果发生任何错误,我将发出ErrorState并显示一条消息,然后在UI中用小部件显示它。这是我应该如何处理错误?这使得事件处理函数在try/catchs中看起来很糟糕。我想知道我做得对不对,想知道实际上应该怎么做?

void _startExercise(ExerciseStarted event, Emitter<ExerciseState> emit) async {
    emit(ExerciseLoadingState());
    try {
      final something = await _repository.doSomething();
      emit(ExerciseLoadedState(something: something));
    } catch (e) {
      log(e.toString());
      emit(const ExerciseErrorState());
    }
  }
o7jaxewo

o7jaxewo1#

好吧,让我们把这个问题分成两部分:
1.您得到一个错误,您想要发出/更改状态。
在这种情况下,您提供的代码示例正确地完成了它-您必须使用try/catch并在Error/Exception的情况下发出错误状态。我唯一要做的调整是将catch (e) {...}更改为on Exception catch (e) {...},因为Dart错误必须在代码中处理,并且您可能会忽略它们,以防您在那里捕获所有内容。
1.你得到一个错误,只是想处理它。
在这种情况下,您可以在存储库中处理错误。例如,使用存储库中的try/catch块并记录错误。由于不需要发出状态更改,因此错误将被处理,并且事件处理程序也不会被这种额外的try/catch逻辑弄得一团糟。
无论如何,无论你选择哪种方式,只要保持一致,你应该很好地去。

相关问题