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

Flutter Bloc报错:调用close后无法添加新事件的原因排查

报错原因
  • 核心冲突点在BlocProvider的自动销毁逻辑和Get_it单例的全局唯一性上:
    1. 你用Get_it注册的MyBloc是全局懒加载单例,整个App里只会存在这一个实例
    2. 但BlocProvider的默认create方式,会在它所属的Widget被销毁时(比如页面返回、组件卸载),自动调用内部Bloc的close()方法
    3. 当第一个使用这个单例Bloc的页面销毁后,这个唯一的MyBloc实例就被关闭了
    4. 之后其他页面再获取这个已经被关闭的实例发送事件,自然会触发Cannot add new events after calling close错误
简单修复方案

如果要继续用全局单例Bloc,把BlocProvider的创建方式改成value模式,这样它不会自动销毁传入的Bloc实例:

BlocProvider.value(
  value: locator<MyBloc>(),
  child: BlocBuilder<MyBloc, MyBlocState>(
    builder: (_, state) => Container()
  )
)

内容的提问来源于stack exchange,提问作者Abhijith Konnayil

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 00:54:52