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 requestId = err.requestOptions.extra['debug_request_id'] as String?;
  final existingRequest = requestId != null
      ? DebugNetworkLogger.requests.firstWhere(
          (r) => r.id == requestId,
          orElse: () => DebugNetworkRequest(
            id: requestId,
            url: err.requestOptions.uri.toString(),
            method: _parseMethod(err.requestOptions.method),
            headers: err.requestOptions.headers,
            body: err.requestOptions.data,
            requestTime: DateTime.now(),
          ),
        )
      : null;

  if (existingRequest != null) {
    final updatedRequest = existingRequest.copyWith(
      statusCode: err.response?.statusCode,
      responseHeaders: err.response?.headers.map.map((k, v) => MapEntry(k, v.join(', '))),
      responseBody: err.response?.data,
      responseTime: DateTime.now(),
      durationMs: existingRequest.requestTime.difference(DateTime.now()).inMilliseconds.abs(),
      errorMessage: err.message ?? err.type.toString(),
      isLoading: false,
    );
    DebugNetworkLogger.updateRequest(updatedRequest);
  }

  super.onError(err, handler);
}