actually I am posting this question again due to some disturbance and miss communication with other developer. actually I am using http_interceptor package where I want to retry the request upon 401 response using this package but when I am retrying I am facing following exception because I am retrying multipart/request from previous answer I got to know that it is a Stream/MultipartFile I can use it only once therefore I want to create new MultipartFile each time when I retry.
following is my interceptor where I am updating headers on retry
class AuthorizationInterceptor extends InterceptorContract {
@override
Future<BaseRequest> interceptRequest({required BaseRequest request}) async {
final prefs = await SharedPreferences.getInstance();
final extractData =
json.decode(prefs.getString('userData')!) as Map<String, dynamic>;
final Map<String, String> headers = Map.from(request.headers);
headers['Authorization'] = await extractData['accessToken'];
print(
'this is from AuthorizationInterceptor: ${extractData['accessToken']}');
// TODO: implement interceptRequest
return request.copyWith(
headers: headers,
);
}
following is my ExpiredTokenRetryPolicy where I am restoring access token on 401 response
class ExpiredTokenRetryPolicy extends RetryPolicy {
BuildContext context;
ExpiredTokenRetryPolicy(this.context);
@override
// TODO: implement maxRetryAttempts
int get maxRetryAttempts => 2;
@override
Future<bool> shouldAttemptRetryOnResponse(BaseResponse response) async {
if (response.statusCode == 401) {
print('retry token started');
//perform token refresh,get the new token and update it in the secure storage
await Provider.of<Auth>(context, listen: false).restoreAccessToken();
return true;
}
return false;
}
}
following is my client where I am using this 2 classes
ApiCalls repository = ApiCalls(
client: InterceptedClient.build(
retryPolicy: ExpiredTokenRetryPolicy(context),
interceptors: [
AuthorizationInterceptor(),
],
),
);
in the above code ExpiredTokenRetryPolicy will retry on response 401 help is appreciated thank you in advance