parseHttpError<T> function
Future<HttpError<T> >
parseHttpError<T>({
- required DioException error,
- StackTrace stackTrace = StackTrace.empty,
- String slug = '',
- String handleErrorMessage({
- required DioException error,
- T? errorResponseSerializer(
- dynamic
- String defaultErrorMessage = "Algo inesperado aconteceu. Tente novamente mais tarde.",
- String defaultNoInternetConnectionMessage = '',
Implementation
Future<HttpError<T>> parseHttpError<T>({
required DioException error,
StackTrace stackTrace = StackTrace.empty,
String slug = '',
String Function({required DioException error})? handleErrorMessage,
T? Function(dynamic)? errorResponseSerializer,
String defaultErrorMessage =
"Algo inesperado aconteceu. Tente novamente mais tarde.",
String defaultNoInternetConnectionMessage = '',
}) async {
Maybe<T> maybeErrorResponse = Maybe.from(errorResponseSerializer != null
? errorResponseSerializer(error.response?.data)
: null);
try {
String msg = defaultErrorMessage;
defaultNoInternetConnectionMessage =
defaultNoInternetConnectionMessage.isNotEmpty
? defaultNoInternetConnectionMessage
: defaultErrorMessage;
slug = slug.isNotEmpty ? slug : error.message ?? error.requestOptions.path;
String formattedStackTrace =
(stackTrace.toString().isNotEmpty ? stackTrace : error.stackTrace)
.toString();
if (handleErrorMessage != null) {
msg = handleErrorMessage(error: error);
} else {
if (error.response != null &&
error.response?.headers.value('Content-Type') == 'application/json' &&
(error.response?.data is Map) &&
error.response?.data.containsKey('msg')) {
msg = error.response?.data["msg"];
}
}
if (error.type == DioExceptionType.badResponse) {
switch (error.response?.statusCode) {
case 400:
return HttpBadRequestError(
stackTrace: formattedStackTrace,
slug: slug,
msg: msg,
errors: error.response?.data,
response: maybeErrorResponse,
);
case 401:
return HttpUnauthorizedError(
stackTrace: formattedStackTrace,
slug: slug,
msg: msg,
response: maybeErrorResponse,
);
case 403:
return HttpForbiddenError(
stackTrace: formattedStackTrace,
slug: slug,
msg: msg,
response: maybeErrorResponse,
);
case 404:
return HttpNotFoundError(
stackTrace: formattedStackTrace,
slug: slug,
msg: msg,
response: maybeErrorResponse,
);
case 410:
return HttpGoneError(
stackTrace: formattedStackTrace,
slug: slug,
msg: msg,
response: maybeErrorResponse,
);
case 422:
return UnprocessableEntityError(
stackTrace: formattedStackTrace,
slug: slug,
msg: msg,
errors: error.response?.data,
response: maybeErrorResponse,
);
case 500:
return HttpInternalServerError(
stackTrace: formattedStackTrace,
slug: slug,
msg: msg,
response: maybeErrorResponse,
);
default:
return HttpUnknownError(
stackTrace: formattedStackTrace,
slug: slug,
msg: msg,
response: maybeErrorResponse,
);
}
} else if (error.type == DioExceptionType.connectionTimeout ||
error.type == DioExceptionType.receiveTimeout ||
error.type == DioExceptionType.sendTimeout ||
error.type == DioExceptionType.unknown ||
error.type == DioExceptionType.connectionError) {
return await parseSocketException(
exception: error,
slug: slug,
msg: defaultNoInternetConnectionMessage,
maybeErrorResponse: maybeErrorResponse,
);
} else {
return HttpUnknownError(
msg: defaultErrorMessage,
response: maybeErrorResponse,
);
}
} catch (e) {
return HttpUnknownError(
stackTrace: e.toString(),
slug: slug,
msg: defaultErrorMessage,
response: maybeErrorResponse,
);
}
}