为什么调用Provider.of时context参数报错,同代码在其他文件类中无错?
问题原因
你单独写在readfromFirebase.dart中的readFromFirebase是顶层函数,本身作用域内没有内置的context变量,所以调用Provider.of时传入未声明的context会直接报错。
而你把代码写在State类内部时,State实例依附于Flutter组件树,自带全局可用的context属性,所以不需要额外声明就能直接使用,不会报错。
修复步骤
- 修改
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; }
- 调用该顶层函数时,传入当前组件树中可用的context即可,你在
parkingFee_screen.dart里写的future: readFromFirebase(context)写法完全符合要求,只需要确保你已经正确导入了readfromFirebase.dart文件即可。
注意事项
传入的context必须位于你声明CarparksProvider的层级下方,否则会抛出「找不到对应Provider」的运行时错误。
内容的提问来源于stack exchange,提问作者L M
相关产品推荐
相关产品推荐

