【发布时间】:2020-03-17 14:38:51
【问题描述】:
我正在使用 Flutter 和 Firestore 插件开发一个群聊应用程序。从数据库中获取数据并将快照转换为消息列表完全可以正常工作。但现在我想将数据库中的 uid 转换为用户名(uid 及其用户名保存在数据库中)。这是我的代码:
final CollectionReference messagesCollection =
Firestore.instance.collection('messages');
final CollectionReference usersCollection =
Firestore.instance.collection('users');
Future<String> getUsernameByUID(String _uid) async {
String username =
await usersCollection.document(uid).get().then((querySnapshot) {
return (querySnapshot.data["username"]);
});
return username;
}
List<Message> _messagesFromSnapshot(QuerySnapshot snapshot){
return snapshot.documents.map((doc) {
String username = await getUsernameByUID(doc.data["uid"]);
return Message(
text: doc.data["text"] ?? "",
username: username ?? "",
time: doc.data["time"] ?? "",
);
}).toList();
}
Stream<List<Message>> get messages {
return messagesCollection
.orderBy("time")
.snapshots()
.map(_messagesFromSnapshot);
}
问题出在这一行,因为我无法在 map() 中运行此异步代码。
String username = await getUsernameByUID(doc.data["uid"]);
有解决办法吗?提前致谢。
【问题讨论】:
标签: firebase flutter dart google-cloud-firestore