copyToSink<T> function
Copies stream
into sink
.
copyTo
if specified, it is called instead ofsink.add
. The implementation can callclose()
if it'd like to stop the reading.
Implementation
Future copyToSink<T>(Stream<T> stream, EventSink<T> sink,
{bool cancelOnError = true, bool closeSink = true,
void copyTo(T event, void close())?}) {
final completer = Completer();
var done = false;
void setDone() {
if (!done) {
done = true;
if (closeSink) sink.close();
completer.complete();
}
}
stream.listen(
copyTo == null ? sink.add: (data) => copyTo(data, setDone),
onError: (Object e, StackTrace st) {
if (!done) {
sink.addError(e, st);
if (cancelOnError) {
completer.complete();
if (closeSink) sink.close();
}
}
},
onDone: setDone,
cancelOnError: cancelOnError);
return completer.future;
}