stream<T> method

Stream<T> stream<T>(
  1. String key
)

Get a stream on the preference changes

Implementation

Stream<T> stream<T>(String key) {
  late StreamController<T> controller;

  void emit() {
    try {
      final value = get<T>(key);
      if (value != null) {
        controller.add(value);
      }
    } catch (e) {
      controller.addError(e);
    }
  }

  void listen() {
    emit();
    addKeyListener(key, emit);
  }

  void done() {
    removeKeyListener(key, emit);
  }

  controller = StreamController<T>(
    onListen: listen,
    onResume: listen,
    onPause: done,
    onCancel: () {
      done();
      controller.close();
    },
  );

  return controller.stream;
}