未处理的异常: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 [重复]