在Flutter中创建文档后,返回新创建的Document ID

时间:2020-09-07 18:53:13

标签: firebase flutter dart google-cloud-firestore

首先,非常感谢您的时间和帮助。

我在类中定义了一个方法,可将数据添加到Firestore数据库中,如下所示:

class DatabaseService {

Future<DocumentReference> addData() async {
    DocumentReference doc = await _userCollection.add({
      'firstName': 'Mickey',
      'lastName': 'Mouse',
      'age': 10,
      'languages': ['English'],
      'timestamp': FieldValue.serverTimestamp(),
    });
    return doc;
  }
}

当我点击有状态的类中的凸起按钮时调用此方法。它可以按预期正常运行,并在Firestore数据库中创建一个新文档。我想用addData方法返回新创建的文档的文档ID,但不确定如何返回和显示文档ID。

这是我的onPressed事件中的代码的外观:

onPressed: () {
                      Future<DocumentReference> doc =
                          DatabaseService().addData();
                      print(doc);
                    },

它仅在控制台中打印以下行:

Instance of 'Future<DocumentReference>'

当我尝试打印id属性时,它给我一个编译错误。

print(doc.id);

我正在使用以下列出的最新版本的Firebase Firestore软件包:

  firebase_core: ^0.5.0
  firebase: ^7.3.0
  cloud_firestore: ^0.14.0+

1 个答案:

答案 0 :(得分:2)

您获得Instance of 'Future<DocumentReference>'而不是价值的原因是它是未来。它们具有值或错误之前,需要等待将来。您应该改为这样

onPressed: () async {
  DocumentReference doc = await DatabaseService().addData();
  print(doc);
},

此外,您的addData函数不正确。您的函数应该返回一个Future<DocumentReference>,但是您要返回一个DocumentReference。您可能想从函数中删除等待。像这样

class DatabaseService {

Future<DocumentReference> addData() async {
    Future<DocumentReference> doc = _userCollection.add({
      'firstName': 'Mickey',
      'lastName': 'Mouse',
      'age': 10,
      'languages': ['English'],
      'timestamp': FieldValue.serverTimestamp(),
    });
    return doc;
  }
}

我强烈建议您阅读有关asynchronous programming: futures, async, await的更多信息。它将为您将来节省很多头疼,没有双关语:)