Ho un'app di chat in Flutter con Firestore e ho due raccolte principali:
chats
, Che è calettato su auto-id, ed hamessage
,timestamp
euid
campi.users
, che è impostato su chiaveuid
e ha unname
campo
Nella mia app mostro un elenco di messaggi (dalla messages
raccolta), con questo 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;
}
}
Ma ora voglio mostrare il nome dell'utente (dalla users
raccolta) per ciascun messaggio.
Normalmente chiamo un join lato client, anche se non sono sicuro che Flutter abbia un nome specifico per questo.
Ho trovato un modo per farlo (che ho pubblicato di seguito), ma mi chiedo se c'è un altro / migliore / più idiomatico modo di fare questo tipo di operazione in Flutter.
Quindi: qual è il modo idiomatico in Flutter di cercare il nome utente per ciascun messaggio nella struttura sopra?