如何在 Dart 中使用或创建观察者模式(特别是 class 属性)

How to use or create an Observer Pattern in Dart (specially for class properties)

我无法找到在 Dart 中使用观察者模式的标准方法;我发现的几乎所有东西都非常过时或包含已弃用的软件包。

我要找的是非常接近this answer(过时),其中@observable被用在属性之上,然后你可以听变化到 属性(非常类似于 TypeScript 中的 Angular)。 ChangeNotifier class 可以达到类似的效果,但它在 Flutter 包之一(foundation)中,所以我认为这不是标准方式,否则它会是一个简单的 Dart 包。

我还发现了另外 2 个简洁的软件包,它们提供的东西与我的想法相近:property_change_notifier and simple_observable

无论如何,我想知道是否有一个简单的方法可以将 Observer 功能添加到 class 属性。我正在考虑将 属性(实际上是另一个基于 属性 的 getter)变成 Stream,这会 yield 一个新值属性 上的 setter 被调用的时间。或者让 setter 也将 Stream 作为参数,并在 属性 更改后将值传递给 Stream(是否可以附加一个值到外部流?)。

您可以使用 StreamView 来实现 class 实现流接口——这是可观察的。

这是一个例子:

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