flutter 如何从两个不同的期货中减去结果值?

jk9hmnmh  于 2022-11-17  发布在  Flutter
关注(0)|答案(1)|浏览(116)

我使用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行。

vmdwslir

vmdwslir1#

你的聊天模型应该有一个布尔值readisRead或任何你喜欢的名字,然后更新为true,如果其他用户进入聊天室。

class Chat{
 final String content;
 final bool isRead;   //add this to your model
 }

这使得它更容易查询所有聊天where('isRead', isEqualto, false)

相关问题