【问题标题】:Flutter: How to Retrieve field within documents belowFlutter:如何在以下文档中检索字段
【发布时间】:2020-06-02 10:17:54
【问题描述】:

我想在所附图像中显示的所有这些文档中检索 hasVoted 字段(我在创建的所有文档中都有该 hasVoted 字段)。下面是我的代码,但它似乎没有工作。我做错了什么以及检索这些字段的正确方法是什么?

_checkUserVotes(context, data) async {

bool hasVoted = false;
final record = Record.fromSnapshot(data);

getData() async {

return await Firestore.instance.collection("finance").getDocuments();

}

getData().then((val){

if(hasVoted == true){

  return Text("Sorry you have voted already");
}

else if(hasVoted != true){

 return GestureDetector(

    onTap: () => record.reference.updateData({'votes': record.votes + 1}),

  );
}
});
}

this is the Backened

【问题讨论】:

  • 看,从图中我可以看到,有一个hasLiked的ID,看看谁喜欢它。用它来查看这个人是否喜欢它。用 hasVoted Key 匹配 userID,然后获取 value。
  • @Alok,感谢您的回复。附图中没有hasLiked,而是有hasVoted。关于您评论的这方面,(将用户ID与hasVoted Key匹配,然后获取值。)您能否进一步解释一下。请原谅我的提问,我是 Flutter 新手,这是我的第一个应用程序。

标签: android flutter dart google-cloud-firestore


【解决方案1】:

假设您的集合名为 finance,您需要访问 每个 文档中的 Map 字段。

QuerySnapshot snapshot = await Firestore.instance.collection("finance").getDocuments();

snapshot.documents.forEach((document){
      if(document.data != null && document.data['hasVoted']['yourId']){
        print('Has voted');
      }
    });

现在的问题是,我不知道你从哪里得到 yourID 属性,但你现在应该这样做。

如果您想从它们全部迭代,只需直接使用该映射中的值。

snapshot.documents.forEach((document){
      if(document.data['hasVoted'] is Map && (document.data['hasVoted'] as Map).values.first){
        print('Has voted');
      }
    });

但我真的建议您将这些数据解析为模型(例如MyModel.fromData(document)),这样您才能真正提高代码的可读性。

【讨论】:

  • 感谢您的评论。 ID 属性是经过身份验证的用户的 ID。我手动将其粘贴在那里,因为我不知道如何以编程方式将其发送到那里。它的目的是检查用户是否已经投票。如果是,则下一票不计,如果否,则计票。
  • 您的回答很完美,我确实投了票,但似乎我的声誉很低,所以没有显示。我想我的问题应该分为两部分。第 1 部分是您回答的内容,第 2 部分是,当用户投票时,我需要增加后端的投票。应该让用户在每个类别中只投票一次。这是我应该添加到问题中的部分。如果您对此有任何想法,请提供帮助。谢谢@asbovelw
猜你喜欢
  • 1970-01-01
  • 2021-10-26
  • 2020-12-01
  • 2021-09-23
  • 2019-04-26
  • 2021-12-11
  • 1970-01-01
  • 2018-04-03
  • 1970-01-01
相关资源
最近更新 更多