repeatLatest method
Implementation
Stream<T> repeatLatest() {
var done = false;
T? latest;
var currentListeners = <MultiStreamController<T>>{};
this.listen((event) {
latest = event;
for (var listener in [...currentListeners]) listener.addSync(event);
}, onError: (Object error, StackTrace stack) {
for (var listener in [...currentListeners])
listener.addErrorSync(error, stack);
}, onDone: () {
//TO-DO: PERFORMANCE, okay we currently dont close the streams so photos can be shown again (see #36), but thats very bad for performance, so find an actual solution instead of a dirty workaround
// done = true;
// latest = null;
// for (var listener in currentListeners) listener.close();
// currentListeners.clear();
});
return Stream.multi((controller) {
// ignore: dead_code
if (done) {
controller.close();
return;
}
currentListeners.add(controller);
var latestValue = latest;
if (latestValue != null) controller.add(latestValue);
controller.onCancel = () {
currentListeners.remove(controller);
};
});
}