onError method
Called when an exception was occurred during the request.
Implementation
@override
Future<void> onError(
DioError err,
ErrorInterceptorHandler handler,
) async {
if (err.response?.statusCode! == 401) {
try {
final token = await pref.readRefreshToken();
if (token.isNotEmpty) {
instance.options.headers['X-API-KEY'] =
err.requestOptions.headers['X-API-KEY'];
final resp = await instance.post(
'/account-auth/refresh-token',
data: {
'refresh_token': token,
},
);
final data = resp.data;
await handelData(data, pref);
final accessToken = data['access_token'];
err.requestOptions.headers['Authorization'] = 'Bearer $accessToken';
final opts = Options(
method: err.requestOptions.method,
headers: err.requestOptions.headers,
);
instance.options.baseUrl = err.requestOptions.baseUrl;
final cloneResponse = await instance.request(
err.requestOptions.path,
options: opts,
data: err.requestOptions.data,
queryParameters: err.requestOptions.queryParameters,
);
return handler.resolve(cloneResponse);
}
} catch (e) {
e as DioError;
if (e.response?.statusCode == 401) {
await pref.deleteRefreshToken();
await pref.deleteToken();
}
}
}
super.onError(err, handler);
}