在Dart/Flutter中,我有一个这样定义的StreamController:
MyEventStreamer() {
_controller = StreamController<TimedEvent>(
onListen: _startStream,
onResume: () {
throw UnimplementedError();
},
onPause: () {
throw UnimplementedError();
},
onCancel: _stopStream);
_calculateEventTimes();
}
我有抛出的原因是,我不希望onPause或onResume被使用…我想抛出一个错误,以防我以后忘记这个。
然而,由于这些显然没有显式调用(并且文档似乎没有描述何时调用它们),我担心这些可能会在某些未知的情况下被系统调用…比如当应用处于后台时,手机上的生命周期事件等等……这可不好。
这是一个合理的问题——或者这些方法从来没有被程序员编写的代码以外的任何东西调用?
- OnListen -当有监听器附加时
- OnCancel -当监听器取消监听事件。
调用pause/resume的场景很少。
- 如果你创建了一个流,但不希望在至少有一个监听器之前发出任何事件。通过这种方式,缓冲第一个侦听器之前的所有事件并将其发送到附加的侦听器。在这里你创建一个流,暂停它并调用它的resume一旦onListen被调用。
- 当使用asyncExpand/asyncMap时,每个事件根据用户提供的转换方法转换为另一个事件。每个事件被传递给asyncExpand/asyncMap以获得新的事件,这可能需要一些时间(在极少数情况下)。当这些转换器方法没有返回它们的值时,流不应该发出更多的值,它应该缓冲新的事件。
- 也许你连接到websocket或firebase,当应用程序在后台时你不想听任何事件,你可以调用pause/resume来延迟数据,一旦应用程序在前台。
可能还有其他用例,但这些都是我所知道的在flutter框架中提供的用例。