Ich habe eine Chat-App in Flutter mit Firestore und zwei Hauptsammlungen:
chats
Wird die auf Auto-IDs eingegeben hat , und hatmessage
,timestamp
unduid
Felder.users
, die eingegebenuid
ist und einname
Feld hat
In meiner App zeige ich eine Liste von Nachrichten (aus der messages
Sammlung) mit diesem Widget:
class ChatList extends StatelessWidget {
@override
Widget build(BuildContext context) {
var messagesSnapshot = Firestore.instance.collection("chat").orderBy("timestamp", descending: true).snapshots();
var streamBuilder = StreamBuilder<QuerySnapshot>(
stream: messagesSnapshot,
builder: (BuildContext context, AsyncSnapshot<QuerySnapshot> querySnapshot) {
if (querySnapshot.hasError)
return new Text('Error: ${querySnapshot.error}');
switch (querySnapshot.connectionState) {
case ConnectionState.waiting: return new Text("Loading...");
default:
return new ListView(
children: querySnapshot.data.documents.map((DocumentSnapshot doc) {
return new ListTile(
title: new Text(doc['message']),
subtitle: new Text(DateTime.fromMillisecondsSinceEpoch(doc['timestamp']).toString()),
);
}).toList()
);
}
}
);
return streamBuilder;
}
}
Aber jetzt möchte ich den Namen des Benutzers (aus der users
Sammlung) für jede Nachricht anzeigen.
Normalerweise nenne ich das einen clientseitigen Join, obwohl ich nicht sicher bin, ob Flutter einen bestimmten Namen dafür hat.
Ich habe einen Weg gefunden, dies zu tun (den ich unten gepostet habe), aber ich frage mich, ob es einen anderen / besseren / idiomatischeren Weg gibt, um diese Art von Operation in Flutter durchzuführen.
Also: Wie wird in Flutter idiomatisch nach dem Benutzernamen für jede Nachricht in der obigen Struktur gesucht?