Flutter Bloc报错:调用close后无法添加新事件的原因排查
报错原因
- 核心冲突点在BlocProvider的自动销毁逻辑和Get_it单例的全局唯一性上:
- 你用Get_it注册的
MyBloc是全局懒加载单例,整个App里只会存在这一个实例 - 但
BlocProvider的默认create方式,会在它所属的Widget被销毁时(比如页面返回、组件卸载),自动调用内部Bloc的close()方法 - 当第一个使用这个单例Bloc的页面销毁后,这个唯一的
MyBloc实例就被关闭了 - 之后其他页面再获取这个已经被关闭的实例发送事件,自然会触发
Cannot add new events after calling close错误
- 你用Get_it注册的
简单修复方案
如果要继续用全局单例Bloc,把BlocProvider的创建方式改成value模式,这样它不会自动销毁传入的Bloc实例:
BlocProvider.value( value: locator<MyBloc>(), child: BlocBuilder<MyBloc, MyBlocState>( builder: (_, state) => Container() ) )
内容的提问来源于stack exchange,提问作者Abhijith Konnayil
相关产品推荐
相关产品推荐

