先前添加的流值在监听时返回(广播流)

Seb*_*der 6 dart

我有一个习惯StreamController<int>

final StreamController listener = StreamController<int>.broadcast();
Run Code Online (Sandbox Code Playgroud)

初始化后,我向流发出一个值

listener.add(7);
Run Code Online (Sandbox Code Playgroud)

发出值后,我设置了一个Stream侦听器

listener.stream.listen((val) {
    print(val);
});
Run Code Online (Sandbox Code Playgroud)

预期的行为是侦听器将返回之前设置的值,但事实并非如此。只有在设置监听器之后设置该值,监听器才会被调用。

我怎样才能实现这种行为?

(编辑:必须支持多个侦听器)

jul*_*101 4

首先,不要创建广播流Stream,因为这种流的定义是允许多个订阅者,但如果没有当前订阅者,所有事件都将丢失。

然后,查看从 .asBroadcastStream返回StreamStreamController. 此方法允许实现在第一个订阅者之后首先侦听流的逻辑,并且还可以在没有更多订阅者时进行诸如暂停流之类的逻辑。

  • **一个合适的替代方案是 RxDart 的 [BehaviorSubject](https://pub.dev/documentation/rxdart/latest/rx/BehaviorSubject-class.html),这个类正是我一直要求的工作** (4认同)