我让随机聊天应用程序使用FirestoreAnimatedList(适用于Firestore的FirebaseAnimatedList)。
如果同一用户发送很多消息,所以我不想只显示一次用户头像,那么同一时间不显示同一头像。
我的解决方案是使用索引检查同一用户是否发送了最后一条消息。
所以我需要检查:
if (snapshot[index - 1][‘user’] == user) {
return true;
}
但是我的snapshot
是DocumentSnapshot
,所以不能打电话给[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,
),
);
},
答案 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;
}