首先,非常感谢您的时间和帮助。
我在类中定义了一个方法,可将数据添加到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+
答案 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的更多信息。它将为您将来节省很多头疼,没有双关语:)