gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 04:57:23 28 4
gpt4 key购买 nike

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

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

我还发现了另外 2 个简洁的软件包,它们确实提供了接近我所想的东西:property_change_notifiersimple_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/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com