Flutter中BlocProvider导航跨页面访问原有Bloc实例报错如何解决
崩溃原因
- 存在拼写错误:代码中
contxt拼写错误,缺少字母e,正确写法为context,该错误会直接触发运行异常。 - BlocProvider使用方式错误:
create参数仅用于初始化新的Bloc实例,不可用来传递已存在的Bloc实例,错误使用会导致实例生命周期异常、上下文读取失败,最终触发崩溃。
正确实现方案
你需要使用BlocProvider.value构造方法传递已有的BlocA实例,该构造方法专门用于跨组件/路由复用现有Bloc的场景,实现代码如下:
Navigator.push( context, MaterialPageRoute( builder: (context) { return BlocProvider.value( value: context.read<BlocA>(), child: PageB(), ); }, ), );
注意事项
- 调用
context.read<BlocA>()时使用的上下文必须是能访问到PageA层BlocA实例的上下文,不可使用MaterialPageRoute的builder参数内新生成的context。 - 该方式传递的BlocA生命周期仍与PageA绑定,仅当PageA被销毁时BlocA才会被回收,PageB销毁不会影响BlocA的正常使用。
内容的提问来源于stack exchange,提问作者reza
相关产品推荐
相关产品推荐

