handleDioException static method
Failure
handleDioException(
- DioException exp
)
Implementation
static Failure handleDioException(DioException exp) {
// Default fallback
UnifiedHttpClientEnum type = UnifiedHttpClientEnum.undefined;
String message = "Something went wrong";
// 1️⃣ Response based errors (server responded)
if (exp.response != null) {
final statusCode = exp.response?.statusCode;
final serverMessage = exp.response?.data is Map && exp.response?.data['message'] != null
? exp.response?.data['message'].toString()
: exp.message ?? "Server error";
switch (statusCode) {
case 400:
type = UnifiedHttpClientEnum.badRequestError;
break;
case 401:
type = UnifiedHttpClientEnum.unAuthorizationError;
break;
case 403:
type = UnifiedHttpClientEnum.forbiddenError;
break;
case 404:
type = UnifiedHttpClientEnum.notFoundError;
break;
case 409:
type = UnifiedHttpClientEnum.conflictError;
break;
case 500:
type = UnifiedHttpClientEnum.internalServerError;
break;
case 501:
type = UnifiedHttpClientEnum.serverNotSupportError;
break;
case 503:
type = UnifiedHttpClientEnum.serverUnavailableError;
break;
case 504:
type = UnifiedHttpClientEnum.serverGatewayTimeOut;
break;
default:
type = UnifiedHttpClientEnum.undefined;
break;
}
return Failure(type, serverMessage ?? 'something went wrong...');
}
// 2️⃣ Timeout
if (exp.type == DioExceptionType.connectionTimeout || exp.type == DioExceptionType.sendTimeout || exp.type == DioExceptionType.receiveTimeout) {
return const Failure(
UnifiedHttpClientEnum.timeOutError,
"Connection timed out",
);
}
// 3️⃣ No internet / socket
if (exp.error is SocketException) {
return const Failure(
UnifiedHttpClientEnum.noInternetError,
"No internet connection",
);
}
// 4️⃣ Format exception
if (exp.error is FormatException) {
return const Failure(
UnifiedHttpClientEnum.formatExceptionError,
"Invalid response format",
);
}
// 5️⃣ Platform exception
if (exp.error is PlatformException) {
return const Failure(
UnifiedHttpClientEnum.platformExceptionError,
"Platform error occurred",
);
}
// 6️⃣ Cancelled
if (exp.type == DioExceptionType.cancel) {
return const Failure(
UnifiedHttpClientEnum.undefined,
"Request cancelled",
);
}
// 7️⃣ Unknown Dio error
if (exp.type == DioExceptionType.unknown) {
return Failure(
UnifiedHttpClientEnum.socketExceptionError,
exp.message ?? "Network error",
);
}
// 8️⃣ Absolute fallback
return Failure(
UnifiedHttpClientEnum.undefined,
exp.message ?? "Unexpected error occurred",
);
}