finalize method
Commits all fields and files into a stream for the final sending.
Implementation
Stream<Uint8List> finalize() {
if (isFinalized) {
throw StateError(
'The FormData has already been finalized. '
'This typically means you are using '
'the same FormData in repeated requests.',
);
}
_isFinalized = true;
final controller = StreamController<Uint8List>(sync: false);
void writeAscii(String s) => controller.add(utf8.encode(s));
void writeUtf8(String string) => controller.add(utf8.encode(string));
void writeLine() => controller.add(_rnU8); // \r\n
for (final entry in fields) {
writeAscii('--$boundary$_rn');
writeAscii(_headerForField(entry.key, entry.value));
writeUtf8(entry.value);
writeLine();
}
Future<void>(() async {
for (final file in files) {
writeAscii('--$boundary$_rn');
writeAscii(_headerForFile(file));
await writeStreamToSink(file.value.finalize(), controller);
writeLine();
}
}).then((_) {
writeAscii('--$boundary--$_rn');
}).whenComplete(() {
controller.close();
});
return controller.stream;
}