firebase - 未处理的异常:NoSuchMethodError:在 null 上调用了方法“[]”。尝试调用:[](“is_ordered”)。检查空字段 Firebase
问题描述
我正在调用以下方法从 Firestore 中检索项目状态。在某些情况下,该方法在任何其他方法之前被调用,理想情况下将使用所需的列更新集合,在这种情况下称为 is_item_ordered。这会引发错误:未处理的异常:NoSuchMethodError:在 null 上调用了方法“[]”。尝试调用:[](“is_ordered”)。is_ordered 是字段数据,除非已经调用了另一个更新集合的方法,否则该字段数据将为空。它并不总是按这个顺序。如何检查集合没有字段并返回 false/null 等?
Future<bool> getItemOrderedStatus(String itemId, String buyerId) async {
var document = FirebaseFirestore.instance
.collection(ordered_items)
.doc(buyerId)
.collection(order_collection)
.doc(itemId);
return document.get().then((value) => value.data()["is_ordered"]);
}
我努力了:
return document.get().then((value) => value.data()["is_ordered"])??false; //but the error still
//occurs.
引发错误的调用方法如下:
Future<bool> isOffered() async {
//I need to check for a null before doing a return;
return isOnOffer = await Ordering()
.getItemOrderedStatus(widget.itemId, widget.currentUserId);
}
尝试如下检查 null 仍然失败并出现相同的错误:
Future<bool> isOffered() async {
//I need to check for a null before doing a return;
return isOnOffer = await Ordering()
.getItemOrderedStatus(widget.itemId, widget.currentUserId)??false;
}
每当我访问其字段不存在的集合时,这是一个常见错误。我已经用谷歌搜索但没有明确的答案如何检查不存在的字段。
解决方案
尝试使用await
:
Future<bool> getItemOrderedStatus(String itemId, String buyerId) async {
var document = FirebaseFirestore.instance
.collection(ordered_items)
.doc(buyerId)
.collection(order_collection)
.doc(itemId);
var docOrdered = await document.get();
return docOrdered.data()["is_ordered"];
}
推荐阅读
- node.js - fetch-api 中的“最大重定向”错误是什么意思?
- csv - 递归对象写入平面 csv 文件
- android - 即使我的应用程序关闭,广播接收器也应始终在后台运行
- python - pandas sort_values 返回意外结果
- python - 制作均匀形状的张量列表
- c# - 如何将 OneLogin SSO 实施到我的 MVC 网站,类似于 ClassLink SSO 的工作方式
- python - 在 codechef 为什么我的 python 代码给出 NZEC 错误:-
- python - 如何在 TensorFlow 2 中恢复 tf.data.Dataset 位置(状态)
- css - 文字的角度,使其在图像上看起来更自然
- javascript - 在页面上的所有段落或其他元素中显示类名