我正在建立一个简单的聊天应用程序的颤栗,那里可以有多个用户在一个聊天室。有许多房间,用户可以同时加入多个房间,但用户屏幕上只显示一个聊天屏幕(即用户的活动聊天室)。
当用户在聊天室中发布新消息时,服务器会向房间内的其他用户(应用程序/设备)发送新消息可用的通知。
此时,我的应用程序知道服务器中有新消息,甚至可以从服务器获取数据。但是,我不确定如何将这些新数据传递给聊天屏幕的StatefulWidget & State。
下面的问号是我遇到困难的一步。
我想过的几个解决办法是..。
Provider/Consumer依赖于该模型。当获取新的聊天消息时,它将被附加到模型中的聊天消息中。订阅者(聊天屏幕状态)将通过notifyListeners()通知。聊天屏幕UI将获得通知,并将重新构建,使用模型中可用的聊天消息的最新快照。setState将它们附加到状态中的消息列表中,然后重新构建UI。然而,我只是不觉得上述两种方法是让State知道新的聊天消息数据可用的最优雅的方法。在不需要处理UI状态管理的常规编程中,我会在聊天屏幕小部件/状态中创建一个公共方法,并使用聊天消息作为参数调用它,但这不是一蹴而就的方式。
我是新手,对良好的做法不熟悉。解决这个问题的标准/最佳方法是什么?在我的用例中,是否有更简单和更好的方法来传递数据到聊天屏幕小部件?
发布于 2019-10-22 14:32:44
您可以将聊天窗口封装在StreamBuilder (https://api.flutter.dev/flutter/widgets/StreamBuilder-class.html)中。
它基本上是在每次更改(例如一条新消息)上重新构建其内部的整个UI,但不管怎样,这就是Flutter的工作原理。
https://stackoverflow.com/questions/58505913
复制相似问题