payload method
Get the payload (body)
If don't have the contentType of payload will return null
Implementation
Future<Map?> payload({Encoding encoder = utf8}) async {
var completer = Completer<Map>();
if (!hasContentType) return null;
if (isMime('application/x-www-form-urlencoded')) {
const AsciiDecoder().bind(_request).listen((content) {
final payload = {
for (var kv in content.split('&').map((kvs) => kvs.split('=')))
Uri.decodeQueryComponent(kv[0], encoding: encoder):
Uri.decodeQueryComponent(kv[1], encoding: encoder)
};
completer.complete(payload);
});
} else if (isMime('multipart/form-data', loose: true)) {
var boundary = _request.headers.contentType!.parameters['boundary']!;
final payload = {};
MimeMultipartTransformer(boundary)
.bind(_request)
.map(HttpMultipartFormData.parse)
.listen((formData) {
var parameters = formData.contentDisposition.parameters;
formData.listen((data) {
if (formData.contentType != null) {
data = MultipartUpload(
parameters?['filename'],
formData.contentType!.mimeType,
formData.contentTransferEncoding,
data);
}
payload[parameters?['name']] = data;
});
}, onDone: () {
completer.complete(payload);
});
} else if (isMime('application/json')) {
try {
final content = await utf8.decodeStream(_request);
final payload = jsonDecode(content);
completer.complete(payload);
} catch (e) {
rethrow;
}
}
return completer.future;
}