Tengo una aplicación de chat en Flutter usando Firestore, y tengo dos colecciones principales:
chats
, Cuya forma impide el auto-ids, y tienemessage
,timestamp
yuid
campos.users
, que está activadouid
y tiene unname
campo
En mi aplicación muestro una lista de mensajes (de la messages
colección), con este 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;
}
}
Pero ahora quiero mostrar el nombre del usuario (de la users
colección) para cada mensaje.
Normalmente lo llamo una unión del lado del cliente, aunque no estoy seguro de si Flutter tiene un nombre específico para ello.
He encontrado una forma de hacer esto (que he publicado a continuación), pero me pregunto si hay otra forma mejor / más idiomática de hacer este tipo de operación en Flutter.
Entonces: ¿cuál es la forma idiomática en Flutter de buscar el nombre de usuario para cada mensaje en la estructura anterior?