作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我在尝试找到在 Dart 中使用观察者模式的标准方法时遇到了麻烦;我发现的几乎所有东西都非常过时或带有已弃用的软件包。
我正在寻找的内容非常接近 this answer (过时),其中@observable
用在属性之上,然后你就可以监听到属性的变化(很像 TypeScript 中的 Angular)。使用 ChangeNotifier
可以达到类似的效果。类,但它位于 Flutter 包之一( foundation
)中,所以我认为这不是标准方式,否则它将是一个简单的 Dart 包。
我还发现了另外 2 个简洁的软件包,它们确实提供了接近我所想的东西:property_change_notifier和 simple_observable .
无论如何,我想知道是否有一个简单的方法可以将 Observer 功能添加到类属性中。我正在考虑将属性(实际上是基于该属性的另一个 setter/getter )转换为 Stream
, 这将是 yield
每次调用该属性的 setter 时都会创建一个新值。或者让二传手也接受 Stream
作为参数并将其传递给 Stream
一旦更改了属性(是否可以在外部将值附加到 Stream ?)。
最佳答案
您可以使用 StreamView
使一个类实现流接口(interface)——这是可观察的。
这是一个例子:
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);
});
}
关于asynchronous - 如何在 Dart 中使用或创建观察者模式(特别是对于类属性),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60340341/
我是一名优秀的程序员,十分优秀!