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