我正在研究流的概念和实际用途(虽然是非常基本的级别(,我发现下面的代码在调用侦听方法后通过接收器添加数据。那么,传递以侦听的函数是否作为参数不断重复,直到我们的程序结束?
我尝试在每个 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
处理程序。。
当订阅暂停或取消时,订阅不会接收事件,也不会调用任何事件处理程序函数。