如何在更新和显示在Firestore中之前在本地显示数据更改

时间:2018-11-05 04:02:18

标签: dart flutter

我正在关注一个带有flutter和firebase firestore的聊天应用程序的教程。在该应用程序中,当用户向其他人发送短信时,发件人直到在Firestore中对其进行更新后才对发件人可见,然后新数据就会显示在消息列表中。我想是否可以将带有时钟图像的新发送消息添加到消息列表中,以指示它将在数据库中更新,然后在数据库中对其进行更新之后,应将本地添加的消息替换为消息列表中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');
    }
  }

这是教程Chat app with flutter and firestore

的链接

1 个答案:

答案 0 :(得分:0)

这应该不难实现。 当前,任何新的聊天消息在提交后都会发送到Firestore数据库。 您只需要扩展执行此操作的onSubmit函数(在代码示例中可能具有另一个名称),即可将消息临时添加到本地消息列表中。

从数据库收到更新后,您只需从列表中删除临时消息,因为它将被数据库中的内容替换。在进度消息中添加进度指示符,就可以了。

如果您需要更详细的答案,请在您的问题中添加一些代码(理想情况下,还应包含原始教程的链接。)注意:当提供指向外部页面的链接时,请确保该问题仍然完整。死了。)