【发布时间】:2018-09-01 13:04:34
【问题描述】:
使用 Cloud Firestore 作为我的数据库。 我需要在我的代码中从两个单独的文档中读取数据,根据前一个文档中的值从一个文档中获取数据。
在 Future 方法中从 firestore 获取数据,如下所示:
Future<List<Map<String, dynamic>>> getGenAlertsData() async{
QuerySnapshot alertRef = await Firestore.instance.collection('alerts').orderBy('time', descending: true).getDocuments();
List<Map<String, dynamic>> messages = new List();
Map<String, dynamic> fullMessage;
// int counter = 0;
alertRef.documents.forEach((doc) async {
// counter++;
String senderKey, senderNameKey, senderSpecKey, senderPicKey, msgBodyKey, timeKey, sender, senderName, senderSpec, msgBody, senderPic;
senderKey = 'sender';
sender = doc['sender'];
timeKey = 'time';
DateTime time = doc['time'];
print(time);
msgBodyKey = 'msgBody';
msgBody = doc['msgBody'];
DocumentReference ref = Firestore.instance.document('/staff/'+sender);
print(ref.documentID);
await ref.get().then((onValue) { //values not populated here :(
senderNameKey = 'senderName';
senderName = onValue['name'];
print(senderName);
senderPicKey = 'senderPic';
senderPic = onValue['profilePic'];
senderSpecKey = 'specialization';
senderSpec = onValue['specialization'];
});
// await print(senderName);
fullMessage = <String, dynamic> {
senderKey: sender,
senderNameKey: senderName,
senderSpecKey: senderSpec,
senderPicKey: senderPic,
timeKey: time,
msgBodyKey: msgBody,
};
messages.add(fullMessage);
print(messages.toString()); // I get the messages printed in my console here
}); //loop over collection ends here
print(messages.toString()); // No data here :(
return messages;
}
此时只有alertRef.documents.forEach((doc) 中的值可用,await ref.get().then((onValue) { 中的值未填充(它们在fullMessage 映射中为空)。
任何帮助将不胜感激。
【问题讨论】:
标签: firebase dart flutter google-cloud-firestore