onError method

  1. @override
void onError(
  1. DioException err,
  2. ErrorInterceptorHandler handler
)

Called when an exception was occurred during the request.

Implementation

@override
void onError(DioException err, ErrorInterceptorHandler handler) {
  final httpError = NetworkHttpError()..error = err.toString();
  if (err is Error) {
    final basicError = err as Error;
    httpError.stackTrace = basicError.stackTrace;
  }

  networkCore.addError(httpError, err.requestOptions.hashCode);
  final httpResponse = NetworkHttpResponse()..time = DateTime.now();
  if (err.response == null) {
    httpResponse.status = -1;
    networkCore.addResponse(
      httpResponse,
      err.requestOptions.hashCode,
    );
  } else {
    httpResponse.status = err.response!.statusCode;

    if (err.response!.data == null) {
      httpResponse
        ..body = ''
        ..size = 0;
    } else {
      httpResponse
        ..body = err.response!.data
        ..size = utf8.encode(err.response!.data.toString()).length;
    }
    final headers = <String, String>{};
    err.response!.headers.forEach((header, values) {
      headers[header] = values.toString();
    });
    httpResponse.headers = headers;
    networkCore.addResponse(
      httpResponse,
      err.response!.requestOptions.hashCode,
    );
    networkCore.addLog(
      NetworkLog(
        message: err.toString(),
        level: DiagnosticLevel.error,
        error: err,
        stackTrace: err.stackTrace,
      ),
    );
  }
  handler.next(err);
}