import 'package:dio/dio.dart'; class DioExceptions implements Exception { late String message; DioExceptions.fromDioException(DioException dioError) { // log("DioException is ${dioError.type}"); switch (dioError.type) { case DioExceptionType.cancel: message = "Request to API server was cancelled"; break; case DioExceptionType.connectionTimeout: message = "Connection timeout with API server"; break; case DioExceptionType.receiveTimeout: message = "Receive timeout in connection with API server"; break; case DioExceptionType.badResponse: message = _handleError( dioError.response?.statusCode, dioError.response?.statusMessage, ); break; case DioExceptionType.sendTimeout: message = "Send timeout in connection with API server"; break; case DioExceptionType.connectionError: message = "No internet.\n you'll get last cached valid response."; break; case DioExceptionType.unknown: message = (dioError.message == "") ? "Unexpected error occurred" : (dioError.message.toString()); break; default: if (dioError.message?.contains("SocketException") ?? false) { message = 'No Internet'; } else { message = "Something went wrong.\n${dioError.message}"; } break; } } String _handleError(int? statusCode, dynamic error) { switch (statusCode) { case 400: return 'Bad request'; case 401: return 'Unauthorized'; case 403: return 'Forbidden'; case 404: return error; case 500: return 'Internal server error'; case 502: return 'Bad gateway'; default: return 'Oops something went wrong'; } } @override String toString() => message; }