onError method
Called when an exception was occurred during the request.
Implementation
@override
Future<void> onError(
DioException err,
ErrorInterceptorHandler handler,
) async {
final response = err.response;
final alreadyRetried = err.requestOptions.extra[_retryFlag] == true;
if (alreadyRetried || !_shouldRefreshOn(response)) {
handler.next(err);
return;
}
final refreshed = await keeper.forceRefresh();
final refreshedToken = refreshed.dataOrNull;
if (refreshedToken == null) {
onRefreshFailed?.call(refreshed.errorOrNull!);
handler.next(err);
return;
}
final retryOptions = _cloneForRetry(
err.requestOptions,
refreshedToken.accessToken,
);
try {
final retryResponse = await dio.fetch<dynamic>(retryOptions);
handler.resolve(retryResponse);
} on DioException catch (retryError) {
handler.next(retryError);
}
}