You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.06 08:25:17