'Refresh token in custom Interceptor class flutter

i use dio for api calls . On dio i add Custom Interceptors:

factory ApiClient.instance() {
 dio.interceptors.add(CustomInterceptors());
 return _instance;

}

Custom Interceptor extends Interceptor. I need in on void onError(DioError err, ErrorInterceptorHandler handler) when err?.response?.statusCode == 401) refresh token.

void onError(DioError err, ErrorInterceptorHandler handler) async {
print(
    'ERROR[${err.response?.statusCode}] => PATH: ${err.requestOptions.path}');
//TODO :- if status == 401 => refresh token
if (err?.response?.statusCode == 401) {
  Response response = await ApiClient.instance().refreshUserToken();
  if (response.statusCode == 200) {
    LoginResponse? _loginResponse = LoginResponse.fromJson(response.data);
    ApiClient.instance().userToken = _loginResponse.accessToken;
    ApiClient.instance().refreshToken = _loginResponse.refreshToken;
   // retry this request? (call request again)
  }
}
return super.onError(err, handler);

}

Can I in onError method retry request and in one place to do refresh token or do I have to do a refresh token on each request?



Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source