У меня есть приложение чата во Flutter, использующее Firestore, и у меня есть две основные коллекции:
chats
, Который вводится на авто идентификаторов, и имеетmessage
,timestamp
иuid
поле.users
, который включенuid
, и имеетname
поле
В моем приложении я показываю список сообщений (из messages
коллекции), с этим виджетом:
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;
}
}
Но теперь я хочу показать имя пользователя (из users
коллекции) для каждого сообщения.
Я обычно называю это соединением на стороне клиента, хотя я не уверен, есть ли у Flutter определенное имя для него.
Я нашел один способ сделать это (который я разместил ниже), но задаюсь вопросом, есть ли другой / лучший / более идиоматический способ сделать этот тип операции во Флаттере.
Итак: каков идиоматический способ во Флаттере искать имя пользователя для каждого сообщения в приведенной выше структуре?