我在尝试找到在Dart中使用观察者模式的标准方法时遇到了麻烦;我发现的几乎所有东西都非常过时或已弃用。
我正在寻找的内容非常接近this answer(已过时),其中@observable
用于属性的顶部,然后您可以收听对属性的更改(与TypeScript中的Angular十分相似) 。使用ChangeNotifier
类可以实现类似的效果,但是它在Flutter程序包(foundation
)中,所以我不认为这是标准方式,否则它将是一个简单的Dart程序包。
[我还发现了另外两个精巧的软件包,它们确实提供了与我正在考虑的内容相似的东西:property_change_notifier和simple_observable。
无论如何,我想知道是否有一个简单的配方可以将Observer功能添加到类属性。我正在考虑将属性(实际上是基于该属性的另一个吸气剂)转换为Stream
,每次调用该属性的setter时,都会yield
一个新值。还是让设置器也将Stream
作为参数,并在属性更改后让它将值传递给Stream
(是否可以在外部将值附加到Stream?)。
您可以使用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);
});
}