makeStreamedRequest function
Future<StreamedResponse>
makeStreamedRequest({
- required Client client,
- required Uri uri,
- required HttpRequestModel requestModel,
- required APIType apiType,
Implementation
Future<http.StreamedResponse> makeStreamedRequest({
required http.Client client,
required Uri uri,
required HttpRequestModel requestModel,
required APIType apiType,
}) async {
final headers = requestModel.enabledHeadersMap;
final hasBody = kMethodsWithBody.contains(requestModel.method);
final isMultipart = requestModel.bodyContentType == ContentType.formdata;
http.StreamedResponse streamedResponse;
//----------------- Request Creation ---------------------
//Handling HTTP Multipart Requests
if (apiType == APIType.rest && isMultipart && hasBody) {
final multipart = http.MultipartRequest(
requestModel.method.name.toUpperCase(),
uri,
)..headers.addAll(headers);
for (final data in requestModel.formDataList) {
if (data.type == FormDataType.text) {
multipart.fields[data.name] = data.value;
} else {
multipart.files.add(
await http.MultipartFile.fromPath(data.name, data.value),
);
}
}
streamedResponse = await client.send(multipart);
} else if (apiType == APIType.graphql) {
// Handling GraphQL Requests
var requestBody = getGraphQLBody(requestModel);
String? body;
if (requestBody != null) {
var contentLength = utf8.encode(requestBody).length;
if (contentLength > 0) {
body = requestBody;
headers[HttpHeaders.contentLengthHeader] = contentLength.toString();
if (!requestModel.hasContentTypeHeader) {
headers[HttpHeaders.contentTypeHeader] = ContentType.json.header;
}
}
}
final request = http.Request('POST', uri)
..headers.addAll(headers)
..body = body ?? '';
streamedResponse = await client.send(request);
} else {
//Handling regular REST Requests
String? body;
bool overrideContentType = false;
if (hasBody && requestModel.body?.isNotEmpty == true) {
body = requestModel.body;
if (!requestModel.hasContentTypeHeader) {
headers[HttpHeaders.contentTypeHeader] =
requestModel.bodyContentType.header;
} else {
overrideContentType = true;
}
}
final request = prepareHttpRequest(
url: uri,
method: requestModel.method.name.toUpperCase(),
headers: headers,
body: body,
overrideContentType: overrideContentType,
);
streamedResponse = await client.send(request);
}
return streamedResponse;
}