【发布时间】:2021-08-09 10:03:57
【问题描述】:
我正在使用两个查询从 Firestore 中获取数据。
查询 1。
_firestore
.collection('chats')
.doc(getCurrentUser().uid)
.collection('chatUsers')
.orderBy('timestamp');
查询 1 中的所有查询快照文档。我正在获取最后一条消息和文档 ID,并在 listTile 中显示最后一条消息。使用文档 ID,我将传递 ID 以从其他集合中获取其他数据,例如姓名照片等。
查询 2。
Future<DocumentSnapshot> fetchUserData(String uid) async => await _firestore
.collection('users')
.doc(uid).get();
所以为此我需要使用嵌套流构建器。第一个获取所有数据的流生成器。第二个流构建器,用于从所有数据中获取用户请求的数据。最好的方法是什么?
这就是我在我的小部件中为查询 2 使用查询 1 的方式,我必须在 ListView.builder 中实现它,这将是嵌套流。请用最好的方法指导我。
SafeArea(
child: Scaffold(
body: StreamBuilder<QuerySnapshot>(
stream: _fetchUserChatRoom.snapshots(),
builder:
(BuildContext context, AsyncSnapshot<QuerySnapshot> snapshot) {
if (snapshot.hasData) {
return _tiles(snapshot.data.docs);
} else if (snapshot.hasError) {
return Icon(Icons.error_outline);
} else {
return CircularProgressIndicator();
}
}),
),
);
}
Widget _tiles(List<QueryDocumentSnapshot> docs) {
return ListView.builder(
itemCount: docs.length,
itemBuilder: (BuildContext context, int index) {
var data = ChatModel.fromMap(docs[index].data());
return GestureDetector(
onTap: () => Navigator.of(context).push(MaterialPageRoute(
builder: (_) => ChatScreen(uid: docs[index].id))),
child: ListTile(
leading: CircleAvatar(),
title: Text(data.message),
subtitle: Text(data.timestamp.toString()),
trailing: Text('time'),
),
);
});
【问题讨论】:
标签: firebase flutter dart google-cloud-firestore