首页 > 解决方案 > 未处理的异常: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;
 }

每当我访问其字段不存在的集合时,这是一个常见错误。我已经用谷歌搜索但没有明确的答案如何检查不存在的字段。

标签: firebaseflutterdartgoogle-cloud-firestore

解决方案


尝试使用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"];
   }

推荐阅读