Mam aplikację do czatowania we Flutter przy użyciu Firestore i mam dwie główne kolekcje:
chats, Które jest osadzone na auto-ID, i mamessage,timestampiuidpól.users, który jest włączonyuidi manamepole
W mojej aplikacji pokazuję listę wiadomości (z messageskolekcji), z tym widgetem:
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;
}
}
Ale teraz chcę pokazać nazwę użytkownika (z users kolekcji) dla każdej wiadomości.
Zwykle nazywam to dołączeniem po stronie klienta, chociaż nie jestem pewien, czy Flutter ma dla niego określoną nazwę.
Znalazłem jeden sposób na zrobienie tego (co zamieściłem poniżej), ale zastanawiam się, czy istnieje inny / lepszy / bardziej idiomatyczny sposób wykonywania tego typu operacji we Flutter.
Więc: w jaki sposób idiomatyczny sposób Fluttera sprawdza nazwę użytkownika dla każdej wiadomości w powyższej strukturze?