我正在遵循一个聊天应用程序的教程与flutter和firebase的firestore。在该应用程序中,当用户发送短信给其他它是不可见的发件人,直到它得到更新的firestore,然后新的数据显示在消息列表中。我想是有可能添加新发送的消息到消息列表中的时钟图像,表明它将在数据库中更新,然后在它's已在数据库中更新,则本地添加的消息应替换为消息列表中来自firestore的数据。以下是按下按钮发送消息的片段...
void onSendMessage(String content, int type) {
// type: 0 = text, 1 = image, 2 = sticker
if (content.trim() != '') {
textEditingController.clear();
var documentReference = Firestore.instance
.collection('messages')
.document(groupChatId)
.collection('message')
.document(DateTime.now().millisecondsSinceEpoch.toString());
Firestore.instance.runTransaction((transaction) async {
await transaction.set(
documentReference,
{
'idFrom': id,
'idTo': peerId,
'timestamp': DateTime.now().millisecondsSinceEpoch.toString(),
'content': content,
'type': type
},
);
});
listScrollController.animateTo(0.0,
duration: Duration(milliseconds: 300), curve: Curves.easeOut);
} else {
Fluttertoast.showToast(msg: 'Nothing to send');
}
}
2条答案
按热度按时间kognpnkq1#
这应该不难实现,目前任何新的聊天消息在提交时都会发送到Firestore数据库,您只需要扩展执行此操作的onSubmit函数(在代码示例中它可能有另一个名称),以便也将消息临时添加到本地消息列表中。
一旦你收到数据库的更新,你只需要从列表中删除临时消息,因为它将被数据库中的内容所取代。在临时消息中包含进度指示器,你就完成了。
如果您需要更详细的答案,请添加一些代码到您的问题(最好是与原始教程的链接一起。当提供到外部页面的链接时,请确保您的问题仍然完整,即使链接失效。)
uoifb46i2#
我使用了一个云函数来实现这一点。我的消息中有一个isSent字段,它最初是false,当在firestore中创建消息时,我使用云函数更新isSent字段,这样会自动重建UI。它不是很快和准确,但总比没有要好得多