dart 如何在数据更新并显示在firestore中之前在本地显示数据更改

bxjv4tth  于 2023-01-03  发布在  其他
关注(0)|答案(2)|浏览(108)

我正在遵循一个聊天应用程序的教程与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');
    }
  }

这是教程Chat app with flutter and firestore的链接

kognpnkq

kognpnkq1#

这应该不难实现,目前任何新的聊天消息在提交时都会发送到Firestore数据库,您只需要扩展执行此操作的onSubmit函数(在代码示例中它可能有另一个名称),以便也将消息临时添加到本地消息列表中。
一旦你收到数据库的更新,你只需要从列表中删除临时消息,因为它将被数据库中的内容所取代。在临时消息中包含进度指示器,你就完成了。
如果您需要更详细的答案,请添加一些代码到您的问题(最好是与原始教程的链接一起。当提供到外部页面的链接时,请确保您的问题仍然完整,即使链接失效。)

uoifb46i

uoifb46i2#

我使用了一个云函数来实现这一点。我的消息中有一个isSent字段,它最初是false,当在firestore中创建消息时,我使用云函数更新isSent字段,这样会自动重建UI。它不是很快和准确,但总比没有要好得多

相关问题