Я сделал обертку для post/get/put методов. То есть сама логика рефреша уже тут зашита. ну и чтобы избежать зацикливания есть флаг needRefreshTokenIfUnauthorized.
Я отмечу, что у меня со стейтменеджментом пока все скудно - есть только changeNotifier.
Future<http.Response> postRequest(String path,
{Map body, bool needRefreshTokenIfUnauthorized = true}) {
final url = _apiBaseUrl + path;
return
http.post(Uri.encodeFull(url), body: json.encode(body), headers: {
'Content-Type': 'application/json; charset=UTF-8',
'Authorization': 'Bearer ' + _authTokenApi.authentication
}).then((http.Response response) async {
final statusCode = response.statusCode;
if (statusCode == 401) {
if (needRefreshTokenIfUnauthorized == true) {
await _authTokenApi.refreshAuthentication();
return postRequest(path,
body: body, needRefreshTokenIfUnauthorized: false);
}
throw new UnauthorizedException('Unauthorized');
} else if (statusCode < 200 || statusCode >= 400) {
throw new Exception('Error while fetching data');
}
return response;
});
}