如何从itemBuilder访问查询?

时间:2019-03-16 16:58:17

标签: firebase flutter google-cloud-firestore flutter-animation

我让随机聊天应用程序使用FirestoreAnimatedList(适用于Firestore的FirebaseAnimatedList)。

如果同一用户发送很多消息,所以我不想只显示一次用户头像,那么同一时间不显示同一头像。

我的解决方案是使用索引检查同一用户是否发送了最后一条消息。

所以我需要检查:

if (snapshot[index - 1][‘user’] == user) {
  return true;
}

但是我的snapshotDocumentSnapshot,所以不能打电话给[index - 1]

也许我必须从query获得名单? 如何访问才能这样调用列表中的index和像这样的query

谢谢!

例如:

body: FirestoreAnimatedList(
        query: firestore.collection('messages').snapshots(),
        itemBuilder: (
          BuildContext context,
          DocumentSnapshot snapshot,
          Animation<double> animation,
          int index,
        ) {
          return FadeTransition(
            opacity: animation,
            child: MessageItem(
              index: index,
              document: snapshot,
              onTap: _removeMessage,
            ),
          );
        },

1 个答案:

答案 0 :(得分:0)

您可以仅将用户存储在Map中。

在小部件的class中,您将必须创建一个变量来保存地图:

final Map<int, dynamic> users = {};

然后,您可以在itemBuilder回调中填充地图:

itemBuilder: (
          BuildContext context,
          DocumentSnapshot snapshot,
          Animation<double> animation,
          int index,
        ) {
          users[index] = snapshot['user']; // added line
          return FadeTransition(
            opacity: animation,
            child: MessageItem(
              index: index,
              document: snapshot,
              onTap: _removeMessage,
            ),
          );
        },

现在,您可以做您想做的事:

if (users[index - 1] == user) {
  return true;
}