123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121 |
- import 'dart:io';
- import 'package:dio/dio.dart';
- import 'package:eitc_erm_dental_flutter/funcs.dart';
- /// 自定义请求异常父类
- class ApiException implements Exception {
- final int? code;
- final String? message;
- String? stackInfo;
- ApiException([this.code, this.message]);
- factory ApiException.fromDioException(DioException exception) {
- switch (exception.type) {
- case DioExceptionType.connectionTimeout:
- return BadRequestException(-1, getS().connectTimeout);
- case DioExceptionType.sendTimeout:
- return BadRequestException(-1, getS().requestTimeout);
- case DioExceptionType.receiveTimeout:
- return BadRequestException(-1, getS().responseTimeout);
- case DioExceptionType.cancel:
- return BadRequestException(-1, getS().requestCancel);
- case DioExceptionType.badResponse:
- int? errorCode = exception.response?.statusCode;
- switch (errorCode) {
- case 400:
- return BadRequestException(errorCode, getS().requestGrammarError);
- case 401:
- return UnauthorisedException(errorCode, getS().noPermissions);
- case 403:
- return UnauthorisedException(errorCode, getS().serverRejectExec);
- case 404:
- return UnauthorisedException(
- errorCode, getS().requestResourceExist);
- case 405:
- return UnauthorisedException(errorCode, getS().requestMethodBanned);
- case 500:
- return UnauthorisedException(errorCode, getS().serverInternalError);
- case 502:
- return UnauthorisedException(errorCode, getS().gateError);
- case 503:
- return UnauthorisedException(errorCode, getS().serverError);
- case 504:
- return UnauthorisedException(errorCode, getS().gateTimeout);
- case 505:
- return UnauthorisedException(
- errorCode, getS().notSupportHttpRequest);
- default:
- return ApiException(errorCode,
- exception.response?.statusMessage ?? getS().unknownException);
- }
- case DioExceptionType.connectionError:
- if (exception.error is SocketException) {
- return DisconnectException(-1, getS().notworkNotConnect);
- } else {
- return ApiException(-1, getS().connectError);
- }
- case DioExceptionType.badCertificate:
- return ApiException(-1, getS().certificateError);
- case DioExceptionType.unknown:
- return ApiException(
- -1,
- exception.error != null
- ? exception.error.toString()
- : getS().unknownException);
- }
- }
- // 将各种异常转换为ApiException方便进行统一处理
- factory ApiException.from(dynamic exception) {
- if (exception is DioException) {
- return ApiException.fromDioException(exception);
- } else if (exception is ApiException) {
- return exception;
- } else {
- return ApiException(-1, "未知错误")..stackInfo = exception.toString();
- }
- }
- @override
- String toString() {
- return 'ApiException{code: $code, message: $message, stackInfo: $stackInfo}';
- }
- }
- /// 错误请求异常
- class BadRequestException extends ApiException {
- BadRequestException(super.code, super.message);
- }
- /// 未认证异常
- class UnauthorisedException extends ApiException {
- UnauthorisedException(super.code, super.message);
- }
- /// 未登录异常
- class NeedLoginException extends ApiException {
- NeedLoginException(super.code, super.message);
- }
- /// 网络未连接异常
- class DisconnectException extends ApiException {
- DisconnectException(super.code, super.message);
- }
- /// 应用需要强更
- class NeedUpdateException extends ApiException {
- NeedUpdateException(super.code, super.message);
- }
- /// 错误响应格式异常
- class ErrorResponseFormatException extends ApiException {
- ErrorResponseFormatException(super.code, super.message);
- }
- /// 未知响应类型异常
- class UnknowResponseTypeException extends ApiException {
- UnknowResponseTypeException(super.code, super.message);
- }
|