【问题标题】:Flutter Web updating a Value from a Document in Cloud FirestoreFlutter Web 从 Cloud Firestore 中的文档更新值
【发布时间】:2021-07-31 00:51:46
【问题描述】:

我有一个包含歌曲列表的 Cloud Firestore 数据库

当用户添加具有相同歌曲标题的歌曲时,我想更新 Document likes 我尝试了更新方法,但它并没有真正起作用,值没有得到更新。我认为我无法真正访问该文档,可能是我在 Cloud Firestore 中的结构有误。

void _saveLike(Song item) async {
    FirebaseFirestore.instance
        .doc('Songs/${item.title}')
        .update({'likes': item.likes}).then((likes) => print('Song updated'));
  }

这是我更新值的方法

 void checkSong(Song item) {
    bool isSongFound = false;
    list.forEach((s) {
      if (s.title.trim() == item.title.trim()) {
        setState(() {
          s.likes++;
        });
        _saveLike(item);
        
        isSongFound = true;
      }
    });
    if (!isSongFound) {
      addSong(Song(title: textfieldControllersong.text, like: false, likes: 0));
    }
  }

这是我检查歌曲是否已经存在的方法。

有没有更好的方法来使用 Cloud Firebase 甚至其他数据库服务来构建列表?

【问题讨论】:

    标签: firebase flutter listview google-cloud-firestore


    【解决方案1】:

    当您访问这样的文档时:

    FirebaseFirestore.instance
        .doc('Songs/${item.title}')
    

    数据库在 Songs 集合中查找名为 item.title 的文档,但不存在具有该 ID 的文档。

    要根据其字段的值更新文档,您首先需要run a query 查找文档,然后然后运行更新。

    类似:

    FirebaseFirestore.instance
      .collection('Songs')
      .where('title', isEqualTo: item.title)
      .get()
      .then((snapshot) {
        snapshot.docs.forEach((doc) {
          doc.reference.update({'likes': item.likes})
        });
      });
    

    【讨论】:

    • 感谢您的回答!您发布的代码有以下错误:没有为“QuerySnapshot”类型定义吸气剂“参考”。我是否必须从我的收藏中创建一个引用才能正确访问它?对不起,如果这是一个愚蠢的问题
    • 是的,应该是doc。对于此类错误,我建议将参考文档放在手边:pub.dev/documentation/cloud_firestore/latest/cloud_firestore/…
    • 好的,非常感谢您的帮助!现在可以使用了
    猜你喜欢
    • 2020-07-02
    • 2018-09-21
    • 1970-01-01
    • 1970-01-01
    • 2019-07-27
    • 2018-05-08
    • 1970-01-01
    • 2019-10-23
    • 2021-01-24
    相关资源
    最近更新 更多