makeRequest method
Implementation
Future<Response> makeRequest(
String url,
Map<String, String>? query,
Map<String, String>? headers,
List<int>? body,
String type,
) async {
headers?["Content-Type"] = "application/json";
Uri parsedUri = Uri.parse(url);
Uri uri = parsedUri.replace(queryParameters: query ?? {});
int attempt = 0;
while (true) {
attempt++;
try {
http.Response response;
switch (type) {
case "GET":
response = await client.get(
uri,
headers: headers,
);
break;
case "POST":
response = await client.post(
uri,
headers: headers,
body: body,
);
break;
case "PUT":
response = await client.put(
uri,
headers: headers,
body: body,
);
break;
default:
response = await client.get(
uri,
headers: headers,
);
break;
}
if (response.statusCode >= 200 && response.statusCode < 300) {
return parseHttpResponse(response);
}
if (attempt >= maxRetries ||
(response.statusCode != 502 && response.statusCode != 503)) {
return parseHttpResponse(response);
}
} catch (e) {
if (attempt >= maxRetries) {
rethrow;
}
}
final int interval = math.max(
0, (2 * (retryInterval - minRetryInterval)) ~/ (1 << maxRetries));
final Duration delay = Duration(
milliseconds: minRetryInterval + (((1 << (attempt - 1)) * interval)));
await Future.delayed(delay);
}
}