未处理的异常:NoSuchMethodError:在 null 上调用了方法“[]”。尝试调用:[](“is_ordered”)。检查空字段 Firebase [重复]
Posted
技术标签:
【中文标题】未处理的异常:NoSuchMethodError:在 null 上调用了方法“[]”。尝试调用:[](“is_ordered”)。检查空字段 Firebase [重复]【英文标题】:Unhandled Exception: NoSuchMethodError: The method '[]' was called on null. Tried calling: [] ("is_ordered"). check for null fields Firebase [duplicate] 【发布时间】:2021-02-15 02:11:21 【问题描述】:我正在调用以下方法从 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;
当我访问其字段不存在的集合时,这是一个常见错误。我已经用谷歌搜索了但没有明确的答案如何检查不存在的字段。
【问题讨论】:
这能回答你的问题吗? The method '[ ]' was called on null 【参考方案1】:尝试使用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"];
【讨论】:
必须返回默认值 (false)。你的回答很有帮助。【参考方案2】:首先从 firebase 检索文档,然后对响应执行 null 检查,如果不为 null 则返回 is_ordered 值,否则返回 false。
Future<bool> getItemOrderedStatus(String itemId, String buyerId) async
var document = FirebaseFirestore.instance
.collection('ordered_items')
.doc(buyerId)
.collection('order_collection')
.doc(itemId);
var res = await document.get();
if(res.data()!=null)
return res.data()['is_ordered'];
else
return false;
【讨论】:
以上是关于未处理的异常:NoSuchMethodError:在 null 上调用了方法“[]”。尝试调用:[](“is_ordered”)。检查空字段 Firebase [重复]的主要内容,如果未能解决你的问题,请参考以下文章
获取“未处理的异常:NoSuchMethodError:方法'map'在null上被调用”
未处理的异常:NoSuchMethodError:方法“findAncestorStateOfType”在 null 上被调用
Flutter,无法提取 api 数据:(未处理的异常:NoSuchMethodError:方法 'map' 在 null 上被调用。)
未处理的异常:NoSuchMethodError:在 null 上调用了方法“[]”(json 解析)
未处理的异常:NoSuchMethodError:在 null 上调用了方法“toRawHandle”
未处理的异常:NoSuchMethodError:在 null 上调用了方法“[]”。尝试调用:[](“is_ordered”)。检查空字段 Firebase [重复]