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

为什么调用Provider.of时context参数报错,同代码在其他文件类中无错?

问题原因

你单独写在readfromFirebase.dart中的readFromFirebase是顶层函数,本身作用域内没有内置的context变量,所以调用Provider.of时传入未声明的context会直接报错。
而你把代码写在State类内部时,State实例依附于Flutter组件树,自带全局可用的context属性,所以不需要额外声明就能直接使用,不会报错。

修复步骤

  1. 修改readfromFirebase.dart中的函数定义,新增BuildContext类型的入参:
// 新增context入参
Future readFromFirebase(BuildContext context) async {
  Carpark thisCarpark;

  await FirebaseFirestore.instance
      .collection('carpark')
      .get()
      .then((QuerySnapshot snapshot) {
    snapshot.docs.forEach(
      (DocumentSnapshot cp) {
        thisCarpark = Carpark(
          cp.get('name'),
          cp.get('district'),
        );
        Provider.of<CarparksProvider>(context, listen: false)
            .addCarpark(thisCarpark);
      },
    );
  });
  var carparkList = Provider.of<CarparksProvider>(context, listen: false).carparks;
  return carparkList;
}
  1. 调用该顶层函数时,传入当前组件树中可用的context即可,你在parkingFee_screen.dart里写的future: readFromFirebase(context)写法完全符合要求,只需要确保你已经正确导入了readfromFirebase.dart文件即可。

注意事项

传入的context必须位于你声明CarparksProvider的层级下方,否则会抛出「找不到对应Provider」的运行时错误。

内容的提问来源于stack exchange,提问作者L M

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 14:24:04