Firestoreを使用するFlutterにチャットアプリがあり、2つの主要なコレクションがあります。
chats
、オートIDのキー、そして持っていた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に特定の名前があるかどうかはわかりませんが、私は通常、これをクライアント側の結合と呼びます。
私はこれを行う1つの方法を見つけましたが(これは以下に投稿します)、Flutterでこのタイプの操作を行う別の/より良い/より慣用的な方法があるかどうか疑問に思います。
それで、上記の構造で各メッセージのユーザー名を検索するFlutterの慣用的な方法は何ですか?