如何使用BLoC处理错误?

4
我看到有人仅仅使用onError进行调试。我认为可以使用它来发出新的状态,如emit(ErrorState(message: "An error"))。但是随着bloc package的更新,我们应该使用提供给处理程序的emitters,并且不应直接使用专用函数emit
目前,我在所有事件处理程序中都有try/catch块。如果出现任何错误,我就会发出ErrorState并显示一个小部件。这样做是否正确?这使得事件处理程序函数看起来很糟糕。我想知道自己是否做得正确,以及应该如何实际操作?
  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());
    }
  }


1
这是一个常见的做法。不确定处理程序发射器如何处理所有边缘情况。 - Kaushik Chandru
1个回答

3

好的,让我们将这个问题分成两部分:

  1. 您遇到错误并想要发出/更改状态。

在这种情况下,您提供的代码示例是正确的 - 您必须使用try/catch,在出现错误/异常的情况下发出错误状态。我唯一要调整的是将catch (e) {...}更改为on Exception catch (e) {...},因为Dart错误必须在您的代码中处理,如果您在那里捕获所有内容,您可能会简单地忽略它们。

  1. 您遇到错误并只想处理它。

在这种情况下,您可以在存储库内部处理错误。例如,在存储库内部使用try/catch块并记录错误。由于您不需要发出状态更改,因此将处理错误,并且您的事件处理程序也不会混杂着额外的try/catch逻辑。

无论您选择哪种方式,只要保持一致,您就应该可以顺利进行。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接