arriRequest function
Perform a raw http request
Implementation
Future<http.Response> arriRequest(
String url, {
http.Client? httpClient,
HttpMethod method = HttpMethod.get,
Map<String, dynamic>? params,
FutureOr<Map<String, String>> Function()? headers,
/// manually specify specific url query parameters
Map<String, String>? query,
/// manually specify a specific encoding
Encoding? encoding,
String? clientVersion,
}) async {
String defaultErrorMsg =
"Placeholder request. If you see this that means a request was never sent to the server.";
http.Response result = http.Response(
"""{"statusCode": 400,"statusMessage":"$defaultErrorMsg"}""",
400,
);
final finalHeaders = await headers?.call() ?? {};
if (clientVersion != null && clientVersion.isNotEmpty) {
finalHeaders["client-version"] = clientVersion;
}
final client = httpClient ?? http.Client();
String? bodyInput;
if (method != HttpMethod.get && method != HttpMethod.head && params != null) {
finalHeaders["Content-Type"] = "application/json";
bodyInput = json.encode(params);
}
switch (method) {
case HttpMethod.get:
final paramsInput = query ?? params;
if (paramsInput != null) {
final queryParts = <String>[];
for (final entry in paramsInput.entries) {
queryParts.add("${entry.key}=${entry.value.toString()}");
}
final uri = Uri.parse("$url?${queryParts.join("&")}");
result = await client.get(
uri,
headers: finalHeaders,
);
break;
}
final uri = Uri.parse(url);
result = await client.get(uri, headers: finalHeaders);
break;
case HttpMethod.patch:
result = await client.patch(
Uri.parse(url),
headers: finalHeaders,
body: bodyInput,
encoding: encoding,
);
break;
case HttpMethod.put:
result = await client.put(
Uri.parse(url),
headers: finalHeaders,
body: bodyInput,
encoding: encoding,
);
break;
case HttpMethod.post:
result = await client.post(
Uri.parse(url),
headers: finalHeaders,
body: bodyInput,
encoding: encoding,
);
break;
case HttpMethod.head:
final paramsInput = query ?? params;
if (paramsInput != null) {
final queryParts = <String>[];
for (final entry in paramsInput.entries) {
queryParts.add("${entry.key}=${entry.value.toString()}");
}
final uri = Uri.parse("$url?${queryParts.join("&")}");
result = await client.head(
uri,
headers: finalHeaders,
);
}
break;
case HttpMethod.delete:
result = await client.delete(Uri.parse(url),
headers: finalHeaders, encoding: encoding, body: bodyInput);
break;
default:
throw ArriError.fromResponse(result);
}
return result;
}