我使用Firebase和Flutter来计算未读消息的数量。我的聊天功能运行良好,如果用户看到了消息,我会使用可见性小部件将用户ID记录到消息的数组中。
现在的挑战是简单地查询用户尚未阅读的消息数。我尝试通过查询他们已阅读的消息数(因为没有数组不包含),然后从消息总数中减去它来实现这一点。但我不禁怀疑我是否遗漏了一个设计模式。任何帮助都是感激的。
child: Text((Provider.of<PerformingArtsCenterState>(context,
listen: false)
.selectedPACRef!
.collection("chat_messages")
.where("performanceID",
isEqualTo: widget.performance.id)
.where("readByUsers",
arrayContains: Provider.of<LoginState>(
context,
listen: false)
.user!
.userID)
.snapshots()
.length -
Provider.of<PerformingArtsCenterState>(context,
listen: false)
.selectedPACRef!
.collection("chat_messages")
.where("performanceID",
isEqualTo: widget.performance.id)
.snapshots()
.length)
.toString())
我尝试了几种不同的模式,看起来都很有效,包括使用两个单独的FutureBuilders来更新小部件上的两个不同的int变量。看起来有一种更好的设计,而不是编写两个FutureBuilders来获得两个整数值所需的额外的50行。
1条答案
按热度按时间vmdwslir1#
你的聊天模型应该有一个布尔值
read
或isRead
或任何你喜欢的名字,然后更新为true
,如果其他用户进入聊天室。这使得它更容易查询所有聊天
where('isRead', isEqualto, false)