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

问题描述 投票:0回答:1

我在尝试找到在Dart中使用观察者模式的标准方法时遇到了麻烦;我发现的几乎所有东西都非常过时或已弃用。

我正在寻找的内容非常接近this answer(已过时),其中@observable用于属性的顶部,然后您可以收听对属性的更改(与TypeScript中的Angular十分相似) 。使用ChangeNotifier类可以实现类似的效果,但是它在Flutter程序包(foundation)中,所以我不认为这是标准方式,否则它将是一个简单的Dart程序包。

[我还发现了另外两个精巧的软件包,它们确实提供了与我正在考虑的内容相似的东西:property_change_notifiersimple_observable

无论如何,我想知道是否有一个简单的配方可以将Observer功能添加到类属性。我正在考虑将属性(实际上是基于该属性的另一个吸气剂)转换为Stream,每次调用该属性的setter时,都会yield一个新值。还是让设置器也将Stream作为参数,并在属性更改后让它将值传递给Stream(是否可以在外部将值附加到Stream?)。

asynchronous flutter events dart observer-pattern
1个回答
1
投票

您可以使用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);
  });
}
© www.soinside.com 2019 - 2024. All rights reserved.