repeatLatest method

Stream<T> repeatLatest()

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);
    };
  });
}