Как использовать или создать шаблон наблюдателя в Dart (специально для свойств класса) - PullRequest
0 голосов
/ 21 февраля 2020

У меня возникают проблемы при попытке найти стандартный способ использования паттерна наблюдателя в дротике; почти все, что я нахожу, является очень устаревшим или с устаревшими пакетами.

То, что я ищу, довольно близко к этому ответу (устаревший), в котором @observable используется поверх свойства, а затем вы можете прослушивать изменения в свойство (очень похоже на Angular в TypeScript). Подобный эффект может быть достигнут с классом ChangeNotifier, но он находится внутри одного из пакетов Flutter (foundation), поэтому я не думаю, что это стандартный способ, иначе это был бы простой пакет Dart.

Я также нашел 2 других аккуратных пакета, которые предлагают что-то близкое к тому, о чем я думаю: property_change_notifier и simple_observable .

в любом Интересно, есть ли простой рецепт для добавления функциональности Observer к свойству класса? Я думаю о чем-то вроде превращения свойства (фактически другого метода получения, основанного на свойстве) в Stream, что будет yield новым значением каждый раз, когда вызывается установщик этого свойства. Или же установщик принимает также Stream в качестве параметра и передает ему значение Stream после изменения свойства (возможно ли внешнее добавление значения к потоку?).

1 Ответ

1 голос
/ 21 февраля 2020

Вы можете использовать StreamView, чтобы заставить класс реализовать интерфейс потока - который можно наблюдать.

Вот пример:

class Counter extends StreamView<Counter> {
  Counter._(this._controller) : super(_controller.stream);
  factory Counter() => Counter._(StreamController());

  final StreamController<Counter> _controller;

  Future<void> close() => _controller.close();

  int _count = 0;
  int get count => _count;

  void increment() {
    _count++;
    _controller.add(this);
  }
}

, который позволяет вам:

void main() {
  final counter = Counter();
  counter.listen((value) {
    print(value.count);
  });
}
...