首页 > 解决方案 > 从firestore获取最后一条消息

问题描述

我有一个如下所示的 Firestore 集合。我需要获取最后存储的message.

Firestore-root
  |
  --- chat_rooms(collection)
        |
        --- chats(collection, the id for that collection is sender_reciever)
             |
             --- time_send: (millisecondsSinceEpoch)
             |
             --- sender:(string)
             |
             --- message:(string)



这是我db获取最后一个消息的方法

  getLastMessage(String chatRoomId) {
    return  Firestore.instance.
    collection('chat_rooms').document(chatRoomId)
        .collection('chat').orderBy('time_send',descending: false)
        .limit(1);
  }

我在这里称呼它。Chats是一个返回senderand的小部件last_message。基本上我想做的是,例如,在使用whatsapp时,最后一条消息会弹出主页。我正在尝试做完全相同的事情。这样,我也可以得到username。下面的方法不返回实际的用户数据。由于该集合chat_rooms_id的 id 是usernamesender的组合reciever。我只是删除了reciever当前用户。还有,sender剩下的。

   return Chats(
                      username: snapshot.data.documents[index]
                          .data["chat_room_id"] // return chat_room id
                          .toString()
                          .replaceAll("_", "")
                          .replaceAll(Constants.signedUserName, ""),
                      chatRoomId:
                          snapshot.data.documents[index].data["chat_room_id"],
                      last_message: _db
                          .getLastMessage(snapshot
                              .data.documents[index].data["chat_room_id"]
                              .toString())
                          .data[0]['message']
                          .toString(),
                    );

标签: flutterdartgoogle-cloud-firestore

解决方案


你需要

    return  Firestore.instance.
    collection('chat_rooms').document(chatRoomId)
        .collection('chat').orderBy('time_send',descending: false)
        .limit(1).get();
  }

...虽然我会注意到这会返回一个你必须处理的承诺。您为最后一个文档定义了一个 QUERY,但您没有获取查询结果


推荐阅读