import 'package:dio/dio.dart'; /// 自定义异常 class DioHttpException implements Exception { final String? message; final int? code; DioHttpException([ this.code, this.message, ]); String toString() { return "$code$message"; } factory DioHttpException.create(DioException error) { switch (error.type) { case DioExceptionType.unknown: { // 网络异常 return BadRequestException(-2, "无网络"); } case DioErrorType.cancel: { return BadRequestException(-1, "请求取消"); } case DioErrorType.connectionTimeout: { return BadRequestException(-1, "连接超时"); } case DioErrorType.sendTimeout: { return BadRequestException(-1, "请求超时"); } case DioErrorType.receiveTimeout: { return BadRequestException(-1, "响应超时"); } case DioErrorType.badResponse: { try { int? errCode = error.response!.statusCode; switch (errCode) { case 400: { String? msgOf400; try { msgOf400 = error.response!.data["message"]; } on Exception catch (e) { print('****** 400 exception: $e'); } return BadRequestException(errCode, msgOf400 ?? "请求语法错误"); } case 401: { return UnauthorisedException(errCode, "没有权限"); } case 403: { return UnauthorisedException(errCode, "服务器拒绝执行"); } case 404: { return UnauthorisedException(errCode, "无法连接服务器"); } case 405: { return UnauthorisedException(errCode, "请求方法被禁止"); } case 500: { return UnauthorisedException( errCode, error.response?.statusMessage ?? "服务器内部错误"); } case 502: { return UnauthorisedException(errCode, "无效的请求"); } case 503: { return UnauthorisedException(errCode, "服务器挂了"); } case 505: { return UnauthorisedException(errCode, "不支持HTTP协议请求"); } default: { return DioHttpException( errCode, error.response?.statusMessage); } } } on Exception catch (_) { return DioHttpException(-1, "未知错误"); } } break; default: { return DioHttpException(-1, error.message); } } } } /// 请求错误 class BadRequestException extends DioHttpException { BadRequestException([int? code, String? message]) : super(code, message); } /// 未认证异常 class UnauthorisedException extends DioHttpException { UnauthorisedException([int? code, String? message]) : super(code, message); }