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
,timestamp
iuid
pól.users
, który jest włączonyuid
i maname
pole
W mojej aplikacji pokazuję listę wiadomości (z messages
kolekcji), 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?