onError method

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

Logs network-level errors (e.g. connection refused, timeout) at 'error' level, then forwards the error to the next handler.

Note: HTTP 4xx/5xx responses are handled by Connector.send and never reach this method because Dio is configured with validateStatus: (_) => true.

Implementation

@override
void onError(DioException err, ErrorInterceptorHandler handler) {
  final buffer = StringBuffer();
  buffer.writeln('ERROR');
  buffer.writeln('${err.requestOptions.method} ${err.requestOptions.uri}');
  buffer.writeln('Type: ${err.type}');
  buffer.writeln('Message: ${err.message}');

  if (err.response != null) {
    buffer.writeln('Status: ${err.response!.statusCode}');
    buffer.writeln('Data: ${err.response!.data}');
  }

  onLog(
    message: buffer.toString(),
    level: 'error',
    context: 'Lucky',
  );

  super.onError(err, handler);
}