makeResponse method
Writes the response to the wire and closes the underlying HttpResponse.
Callers must await this: the returned future completes once the response has been flushed and the connection closed.
Implementation
Future<void> makeResponse(HttpResponse res) async {
res.statusCode = httpStatusCode;
if (headers.isNotEmpty) {
headers.forEach((key, value) {
res.headers.set(key, value);
});
}
switch (responseType) {
case ResponseType.json:
res.headers.contentType = ContentType.json;
try {
final bytes = _jsonUtf8.convert(data);
res.headers.contentLength = bytes.length;
res.add(bytes);
} catch (e) {
res.write('jsonEncode Error: $e');
}
await res.close();
break;
case ResponseType.html:
res.headers.contentType = ContentType.html;
if (data is String) {
final bytes = _utf8.convert(data);
res.headers.contentLength = bytes.length;
res.add(bytes);
} else {
res.write(data);
}
await res.close();
break;
case ResponseType.sse:
await sseHandler(res);
break;
case ResponseType.streamFile:
StreamFile? stream = StreamFile(
fileName: data['fileName'],
bytes: data['bytes'],
).call();
if (stream == null) {
res.headers.contentType = ContentType.json;
res.write(jsonEncode({"message": "File not found"}));
await res.close();
break;
}
res.headers.contentType = stream.contentType;
res.headers.contentLength = stream.length;
await res.addStream(stream.stream!);
await res.close();
break;
case ResponseType.download:
StreamFile? stream = StreamFile(
fileName: data['fileName'],
bytes: data['bytes'],
).call();
if (stream == null) {
res.headers.contentType = ContentType.json;
res.write(jsonEncode({"message": "File not found"}));
await res.close();
break;
}
res.headers.contentType = stream.contentType;
res.headers.contentLength = stream.length;
res.headers.add("Content-Disposition", stream.contentDisposition);
await res.addStream(stream.stream!);
await res.close();
break;
case ResponseType.redirect:
res.headers.set(HttpHeaders.locationHeader, data);
await res.close();
break;
case ResponseType.none:
res.write(data);
await res.close();
break;
}
}