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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 01:48:03