performApptiveLink<T> method
Perform a action represented by link
body
is the body of the request
headers
will be added in addition to ApptiveGridClient.defaultHeaders
queryParameters
will override any queryParameters
in ApptiveLink.uri
parseResponse
will be called with http.Response
if the request has been successful
Implementation
Future<T?> performApptiveLink<T>({
required ApptiveLink link,
bool isRetry = false,
dynamic body,
Map<String, String> headers = const {},
Map<String, String>? queryParameters,
required Future<T?> Function(http.Response response) parseResponse,
}) async {
final request = http.Request(
link.method,
_generateApptiveGridUri(link.uri).replace(
queryParameters: queryParameters ?? link.uri.queryParameters,
),
);
if (body != null) {
request.body = json.encode(body);
}
request.headers.addAll(_createHeadersWithDefaults(headers));
final streamResponse = await _client.send(request);
final response = await http.Response.fromStream(streamResponse);
if (response.statusCode >= 400) {
if (response.statusCode == 401 && !isRetry) {
await authenticator.checkAuthentication();
return performApptiveLink(
link: link,
body: body,
headers: headers,
queryParameters: queryParameters,
isRetry: true,
parseResponse: parseResponse,
);
} else {
throw response;
}
}
return parseResponse(response);
}