Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/flutter/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Flutter Flatter BLoC:mapEventToState的全局异常处理程序_Flutter_Bloc_Flutter Bloc - Fatal编程技术网

Flutter Flatter BLoC:mapEventToState的全局异常处理程序

Flutter Flatter BLoC:mapEventToState的全局异常处理程序,flutter,bloc,flutter-bloc,Flutter,Bloc,Flutter Bloc,我使用felangel的bloc库。我使用mapEventToState方法中的存储库获取数据。如果存储库引发异常,我希望在全局异常处理程序中捕获它 @override Stream<MyState> mapEventToState(Event event) async* { if (event is MyEvent) { try { var data = await repository.fetchData(); yield MyState(da

我使用felangel的bloc库。我使用mapEventToState方法中的存储库获取数据。如果存储库引发异常,我希望在全局异常处理程序中捕获它

@override
Stream<MyState> mapEventToState(Event event) async* {
  if (event is MyEvent) {
    try {
      var data = await repository.fetchData();
      yield MyState(data);
    } catch (e) {
      //There may be many exceptions
    }
  }
}
@覆盖
流mapEventToState(事件)异步*{
如果(事件为MyEvent){
试一试{
var data=await repository.fetchData();
产量状态(数据);
}捕获(e){
//可能有很多例外
}
}
}

有没有办法在不使用try-catch块的情况下捕获异常?最佳做法是什么?

您可以编写一个用于管理错误的util。我为此写了一些东西。这对你来说可能是个好主意

static String handleError(Error error) {
        String errorDescription = "";
        if (/*error is SomethingError*/) {
          switch (error.type) {
            case ErrorType.CANCEL:
              errorDescription = "ErrorType.CANCEL";
              break;
            case ErrorType.CONNECT_TIMEOUT:
              errorDescription = "ErrorType.CONNECT_TIMEOUT";
              break;
            case ErrorType.DEFAULT:
              errorDescription = "ErrorType.DEFAULT";
              break;
            case ErrorType.RECEIVE_TIMEOUT:
              errorDescription = "ErrorType.RECEIVE_TIMEOUT";
              break;
            case ErrorType.RESPONSE:
              switch (error.response.toString()) {
                case "usernamePasswordFail":
                  errorDescription = "usernamePasswordFail";
                  break;
                default:
                  errorDescription = "errorDescription";
 }, ${error.response.data ?? ''}";
                  break;
              }
              break;
            case ErrorType.SEND_TIMEOUT:
              errorDescription = "ErrorType.SEND_TIMEOUT";
              break;
          }
        } else {
          errorDescription = "somethingElseError";
        }
        return errorDescription;
      }

您可以编写一个用于管理错误的util。我为此写了一些东西。这对你来说可能是个好主意

static String handleError(Error error) {
        String errorDescription = "";
        if (/*error is SomethingError*/) {
          switch (error.type) {
            case ErrorType.CANCEL:
              errorDescription = "ErrorType.CANCEL";
              break;
            case ErrorType.CONNECT_TIMEOUT:
              errorDescription = "ErrorType.CONNECT_TIMEOUT";
              break;
            case ErrorType.DEFAULT:
              errorDescription = "ErrorType.DEFAULT";
              break;
            case ErrorType.RECEIVE_TIMEOUT:
              errorDescription = "ErrorType.RECEIVE_TIMEOUT";
              break;
            case ErrorType.RESPONSE:
              switch (error.response.toString()) {
                case "usernamePasswordFail":
                  errorDescription = "usernamePasswordFail";
                  break;
                default:
                  errorDescription = "errorDescription";
 }, ${error.response.data ?? ''}";
                  break;
              }
              break;
            case ErrorType.SEND_TIMEOUT:
              errorDescription = "ErrorType.SEND_TIMEOUT";
              break;
          }
        } else {
          errorDescription = "somethingElseError";
        }
        return errorDescription;
      }