Eu tenho um aplicativo de bate-papo no Flutter usando o Firestore e tenho duas coleções principais:
chats
, Que é introduzido na auto-ids, e temmessage
,timestamp
euid
campos.users
, que está ativadouid
e tem umname
campo
No meu aplicativo, mostro uma lista de mensagens (da messages
coleção), com 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;
}
}
Mas agora eu quero mostrar o nome do usuário (da users
coleção) para cada mensagem.
Normalmente eu chamo isso de associação do lado do cliente, embora não tenha certeza se Flutter tem um nome específico para ela.
Eu encontrei uma maneira de fazer isso (que eu publiquei abaixo), mas me pergunto se existe outra maneira / melhor / mais idiomática de fazer esse tipo de operação no Flutter.
Então: qual é a maneira idiomática no Flutter de procurar o nome de usuário para cada mensagem na estrutura acima?