在Dart的Cloud Firestore中添加文档后如何获取文档ID

时间:2018-06-27 04:15:39

标签: dart google-cloud-firestore flutter

我使用以下代码通过Dart / Flutter更新了Cloud Firestore集合。

  final docRef = Firestore.instance.collection('gameLevels');
  docRef.document().setData(map).then((doc) {
    print('hop');
  }).catchError((error) {
    print(error);
  });

我正在尝试将文档添加到集合中时创建的documentID,但(doc)参数返回为null。我以为应该是documentReference?

因为它为null,所以显然不能使用doc.documentID。

我在做什么错了?

4 个答案:

答案 0 :(得分:5)

您可以尝试以下操作:

DocumentReferance docRef = await Firestore.instance.collection('gameLevels').add(map);
print(docRef.documentId);

由于add()方法创建了新文档并自动生成了ID,因此您无需显式调用document()方法

或者,如果您要使用“然后”回调,请尝试以下操作:

  final collRef = Firestore.instance.collection('gameLevels');
  DocumentReferance docReferance = collRef.document();

  docReferance.setData(map).then((doc) {
    print('hop ${docReferance.documentId}');
  }).catchError((error) {
    print(error);
  });

答案 1 :(得分:3)

@Doug Stevenson 是对的,调用 doc() 方法将返回您的文档 ID。 (我使用的是 cloud_firestore 1.0.3)

要创建文档,您只需调用 doc()。例如,我想在将消息发送到 Firestore 之前获取消息 ID。

  final document = FirebaseFirestore.instance
      .collection('rooms')
      .doc(roomId)
      .collection('messages')
      .doc();

我可以打印并查看文档的 ID。

print(document.id)

为了保存它而不是调用 add() 方法,我们必须使用 set()。

  await document.set({
    'id': document.id,
    'user': 'test user',
    'text': "test message",
    'timestamp': FieldValue.serverTimestamp(),
  });

答案 2 :(得分:2)

使用 value.id ,您可以在添加到 FireStore 后获取 documentId

CollectionReference users = FirebaseFirestore.instance.collection('candidates');
  

      Future<void> registerUser() {
     // Call the user's CollectionReference to add a new user
         return users.add({
          'name': enteredTextName, // John Doe
          'email': enteredTextEmail, // Stokes and Sons
          'profile': dropdownValue ,//
          'date': selectedDate.toLocal().toString() ,//// 42
        })
            .then((value) =>(showDialogNew(value.id)))
            .catchError((error) => print("Failed to add user: $error"));
      }

答案 3 :(得分:0)

如果Dart API与其他平台类似,则 implementation 'com.google.android.gms:play-services-ads:15.0.1' implementation 'com.google.firebase:firebase-ads:15.0.1' 方法应返回一个具有id属性的文档引用,该文档具有将要添加到集合中的文档的随机生成的id。