替换setData以添加新的Firebase文档

时间:2020-08-18 16:44:48

标签: firebase flutter

我是Flutter的新手,每次调用addActivity时都尝试更改代码以在Firebase中添加新文档。现在,我的代码使用的是setData函数,该函数将覆盖单个文档,而在这里我找不到适合我情况的可行解决方案。

我已经附上了如何设置Firebase数据库以及正在使用的代码的屏幕截图。如果有人可以帮助,将不胜感激。

Firebase Screenshot

我正在使用的代码:

Future addActivity(
    User myUser,
    User client,
    String title, {
    bool mineImage = true,
  }) async {
    print("Add Activity Called");
    var activityCollection =
        usersCollection.document(myUser.email).collection("activity");
    await activityCollection.document(client.username).setData({
      "title": title,
      // "time": DateTime.now().toString(),
      "time": getTime(),

      "imageUrl": (mineImage) ? myUser.imageUrl : client.imageUrl,

    });
    print("Added Activity");
  }

  String getTime() {
    DateTime time = DateTime.now();
    return(new DateFormat.yMMMd().add_jm().format(new DateTime.now()));
  }

  Future<DocumentSnapshot> docExists(
    String id,
  ) async {
    DocumentSnapshot document = await chatRoomsCollection.document(id).get();
    if (!document.exists) {
      print("Document $id does not exist");
      return null;
    } else {
      print("document $id exists");
      return document;
    }
  }

1 个答案:

答案 0 :(得分:1)

setData用传递给该函数的数据替换整个文档。

updateData仅更新您传递给该函数的值,并且文档中存在的数据保持不变。

add将使用新的唯一文档ID在您的集合中创建一个新文档。

您需要更改addActivity函数:

Future addActivity(
    User myUser,
    User client,
    String title, {
    bool mineImage = true,
  }) async {
    print("Add Activity Called");
    var activityCollection =
        usersCollection.document(myUser.email).collection("activity");
    await activityCollection.add({
      "title": title,
      // "time": DateTime.now().toString(),
      "time": getTime(),

      "imageUrl": (mineImage) ? myUser.imageUrl : client.imageUrl,

    });
    print("Added Activity");
  }