StreamController的onListen等回调何时调用?是否会被系统触发?
StreamController回调调用时机及疑问解答
你的担忧并不合理
这些回调只会被开发者编写的代码主动触发,Flutter系统(比如应用进入后台等生命周期事件)不会自动调用Stream的pause()/resume()方法,因此你在onPause/onResume中抛出的UnimplementedError不会被意外触发。
各回调的明确调用时机
- onListen:当第一个订阅者调用
stream.listen()时触发;如果所有订阅者都取消后,又有新的订阅者调用listen(),该回调会再次触发。 - onPause:仅当订阅者对象(
Subscription)调用pause()方法时触发,每调用一次pause()就会触发一次。 - onResume:仅当订阅者对象(
Subscription)调用resume()方法时触发,每调用一次resume()就会触发一次。 - onCancel:当最后一个订阅者调用
Subscription.cancel()时触发;若调用StreamController.close()关闭控制器,所有现有订阅会被自动取消,此时也会触发该回调。
补充说明
如果你确实不需要支持暂停/恢复逻辑,抛出UnimplementedError是个不错的做法——能有效避免后续自己或团队成员误调用pause()/resume()而忽略处理逻辑。只要你的代码中从未主动调用这两个方法,这些回调就永远不会被执行。
内容的提问来源于stack exchange,提问作者Nerdy Bunz
相关产品推荐
相关产品推荐

