import 'package:dio/dio.dart'; abstract class Failure { final String errMessage; Failure(this.errMessage); } class ServerFailure extends Failure { ServerFailure(super.errMessage); @override String toString() { return errMessage; } factory ServerFailure.fromDioError(DioException dioError) { switch (dioError.type) { case DioExceptionType.connectionTimeout: return ServerFailure("Connection timeout with the Server."); case DioExceptionType.sendTimeout: return ServerFailure("Send timeout with the Server."); case DioExceptionType.receiveTimeout: return ServerFailure("Receive timeout with the Server."); case DioExceptionType.badCertificate: return ServerFailure("Bad certificate!"); case DioExceptionType.badResponse: { // var document = parser.parse(dioError.response!.data.toString()); // var message = document.body!.text; return ServerFailure.fromResponse( dioError.response!.statusCode!, dioError.response?.data['error']['message'] ?? "Something went wrong"); } case DioExceptionType.cancel: return ServerFailure("The request to ApiServer was canceled"); case DioExceptionType.connectionError: return ServerFailure("No Internet Connection"); case DioExceptionType.unknown: return ServerFailure("Unexpected Error, Please try again!"); default: return ServerFailure("Unexpected Error, Please try again!"); } } factory ServerFailure.fromResponse(int? statusCode, dynamic responseMessage) { switch (statusCode) { case 401: case 403: return ServerFailure(responseMessage); case 400: return ServerFailure(responseMessage); case 404: return ServerFailure(""); case 500: return ServerFailure(responseMessage); default: return ServerFailure("Opps there was an Error, Please try again!"); } } }