流的侦听方法如何显示调用侦听方法后通过接收器添加的数据



我正在研究流的概念和实际用途(虽然是非常基本的级别(,我发现下面的代码在调用侦听方法后通过接收器添加数据。那么,传递以侦听的函数是否作为参数不断重复,直到我们的程序结束?

我尝试在每个 sink.add 调用之间暂停程序几秒钟,但控制台一次打印了整个数据......我仍在努力理解整个概念是如何运作的。

void main() {
  //
  // Initialize a "Single-Subscription" Stream controller
  //
  final StreamController ctrl = StreamController();
  //
  // Initialize a single listener which simply prints the data
  // as soon as it receives it
  //
  final StreamSubscription subscription = ctrl.stream.listen((data) => print('$data'));
  //
  // We here add the data that will flow inside the stream
  //
  ctrl.sink.add('my name');
  ctrl.sink.add(1234);
  ctrl.sink.add({'a': 'element A', 'b': 'element B'});
  ctrl.sink.add(123.45);
  //
  // We release the StreamController
  //
  ctrl.close();
}
传递给

listen的函数是每当将数据添加到Stream时(或直到取消对流的订阅(时,Stream都会调用该回调

这在Stream.listen文档中进行了解释:

在此流中的每个数据事件上,将调用订阅者的onData处理程序。

当订阅暂停或取消时,订阅不会接收事件,也不会调用任何事件处理程序函数。

最新更新