我有一个定制的StreamController<int>
final StreamController listener = StreamController<int>.broadcast();
初始化后,我向流发出一个值。
listener.add(7);
在发出值后,我设置了一个Stream
侦听器
listener.stream.listen((val) {
print(val);
});
预期的行为是侦听器将返回以前设置的值,但是情况并非如此。只有在设置侦听器之后设置值时,侦听器才会被调用。
我怎样才能做到这种行为?
(编辑:必须支持多个侦听器)
发布于 2020-06-09 06:54:22
首先,不要使Stream
成为广播流,因为这类流的定义是允许多个订阅者,但是如果没有当前订阅者,则所有事件都将丢失。
然后,查看从asBroadcastStream
返回的Stream
上的StreamController
。这种方法允许实现在第一个订阅者之后首先侦听流的逻辑,并且如果没有更多的订阅者,还可以像暂停流这样的逻辑。
发布于 2021-05-18 01:06:14
您可以为它使用StreamController
onListen
回调,因为每次有人订阅时都会调用它。
class StreamExample {
late final StreamController<dynamic> _controller;
dynamic _val;
StreamExample() {
_controller = StreamController.broadcast();
_controller.onListen = () => _controller.add(_val);
}
/// Example setter for value which works
/// like [ChangeNotifier] for [Stream] listeners.
void set val(value) {
_val = value;
_controller.add(value);
}
Stream<dynamic> get stream => _controller.stream;
}
https://stackoverflow.com/questions/62284828
复制相似问题