AppException.create constructor

AppException.create(
  1. DioError error
)

Implementation

factory AppException.create(DioError error) {
  final data = error.response?.data;

  String? msg;

  try {
    if (data != null && data is Map<String, dynamic>) {
      msg = data['message'];
    }
  } catch (_) {}

  switch (error.type) {
    case DioErrorType.cancel:
      {
        /// 请求取消
        return BadRequestException(201, "Request cancellation",dioError: error);
      }
    case DioErrorType.connectionTimeout:
      {
        return BadRequestException(-1, "Connection timed out",dioError: error);
      }
    case DioErrorType.sendTimeout:
      {
        return BadRequestException(-1, "Connection timed out",dioError: error);
      }
    case DioErrorType.receiveTimeout:
      {
        return BadRequestException(-1, "Response timeout",dioError: error);
      }
    case DioErrorType.badResponse:
      {
        try {
          int? errCode = error.response?.statusCode;
          switch (errCode) {
            case 400:
              {
                /// 请求语法错误
                return BadRequestException(errCode!, msg ?? "Request syntax error",dioError: error);
              }
            case 401:
              {
                /// 没有权限
                ///
                ///
                ///
                return UnauthorisedException(errCode!, msg ?? "Permission denied",dioError: error);
              }
            case 403:
              {
                /// 服务器拒绝执行
                return UnauthorisedException(errCode!, msg ?? "Server refused to execute",dioError: error);
              }
            case 404:
              {
                return UnauthorisedException(errCode!, msg ?? "Can not connect to the server",dioError: error);
              }
            case 405:
              {
                /// 请求方法被静止
                return UnauthorisedException(errCode!, msg ?? "Request method is forbidden",dioError: error);
              }
            case 500:
              {
                /// 服务器内部错误
                return UnauthorisedException(errCode!, msg ?? "Server internal error",dioError: error);
              }
            case 502:
              {
                /// 无效的请求
                return UnauthorisedException(errCode!, msg ?? "Invalid request",dioError: error);
              }
            case 503:
              {
                /// 服务器挂了
                return UnauthorisedException(errCode!, msg ?? "Server hung up",dioError: error);
              }
            case 505:
              {
                /// 不支持http请求
                return UnauthorisedException(errCode!, msg ?? "Does not support HTTP protocol request",dioError: error);
              }
            case 504:
              {
                return UnauthorisedException(504, 'Processing timed out, please try again',dioError: error);
              }
            default:
              {
                return AppException(
                    code: errCode ?? 90001,
                    message: 'Sorry, there are some errors in the program, please contact our online customer for processing.',dioError: error);
              }
          }
        } on Exception {
          return AppException(message: msg ?? "unknown mistake", code: -1,dioError: error);
        }
      }
    default:
      {
        final otherErrorType = error.error.runtimeType;
        switch (otherErrorType) {
          case io.SocketException:
            return AppException(code: -121, message: "Network error, please check and try again",dioError: error);
          case io.HandshakeException:
            return AppException(code: -122, message: 'Please check your network connection',dioError: error);
          case AppException:
            return error.error as AppException;
          default:
            return AppException(message: "Service error, please try again", code: -122,dioError: error);
        }
      }
  }
}