在聊天应用程序(firestore)中收听实时更新的最佳方式?

8qgya5xd  于 2021-09-13  发布在  Java
关注(0)|答案(1)|浏览(374)

长话短说,我有一个聊天应用程序,其中的数据库结构如下:您可以在下图中看到的所有聊天都属于一个用户。我是否应该为每个文档(这3个文档)设置一个快照侦听器,这样就可以实时更新聊天功能?就像在facebook上一样。
我不确定是否应该循环浏览聊天文档,并向每个聊天中添加快照侦听器,就像您在下面的代码中看到的那样。在下面的代码中(取自firestore文档),我找不到任何其他类似的方法。
图中的“meldinger”是一组文档,其中每个文档都是一条消息。

const query = db.collection('cities').where('state', '==', 'CA');

const observer = query.onSnapshot(querySnapshot => {
  console.log(`Received query snapshot of size ${querySnapshot.size}`);
  // ...
}, err => {
  console.log(`Encountered error: ${err}`);
});

见下图:
->聊天集
->聊天文档包含
->聊天信息收集
->聊天信息文档。

wd2eg0qa

wd2eg0qa1#

A. StreamBuilder() 在您的情况下,应该可以:

class MyChatWidget extends StateLessWidget {
  Stream<DocumentSnapshot> getStream() => FirebaseFirestore
    .collection('chat')
    .doc('chatid') // or wherever you store the chats
    .snapshots()

  Widget build(_) 
    => StreamBuilder<DocumentSnapshot>(
      stream: getStream(),
      builder: (context, snapshot) {
        if(!snapshot.hasData) {
          return const CircularProgressIndicator();
        } else if(snapshot.hasError) {
          return Icon(Icons.error);
        } else {
          return MyChatWidget(snapshot.data); // cast it if needed
        }
    )
}

相关问题