onError method
Called when an exception was occurred during the request.
Implementation
@override
void onError(DioException err, ErrorInterceptorHandler handler) async {
final status = err.response?.statusCode;
if (status == null || !_statusCodes.contains(status)) {
return handler.next(err);
}
final requestOptions = err.requestOptions;
final currentHeader = requestOptions.headers['Authorization'];
final currentToken = await _getToken();
if ((currentHeader == null || currentHeader.toString().isEmpty) &&
(currentToken == null || currentToken.isEmpty)) {
return handler.next(err);
}
if (requestOptions.extra['_gp_refreshed'] == true) {
return handler.next(err);
}
final newToken = await _refreshTokenOnce();
if (newToken == null || newToken.isEmpty) {
return handler.next(err);
}
requestOptions.headers['Authorization'] = 'Bearer $newToken';
requestOptions.extra['_gp_refreshed'] = true;
try {
final response = await _dio.fetch(requestOptions);
return handler.resolve(response);
} on DioException catch (refreshErr) {
return handler.next(refreshErr);
} catch (_) {
return handler.next(err);
}
}