Flutter聊天应用程序保存设备时间的消息时间戳

lmyy7pcs  于 2022-12-27  发布在  Flutter
关注(0)|答案(1)|浏览(225)

在用户相互传递的消息中创建相同的时间戳时遇到问题。
这是一个发送消息的函数:

void onSendMessage(String content, int type) {
    if (content.trim() != '') {
      textEditingController.clear();

      var documentReference = Firestore.instance
          .collection('messages')
          .document(groupChatId)
          .collection(groupChatId)
          .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
          },
        );
      });

      cacheSet(groupChatId, content, peerNickname, peerAvatar);
      listScrollController.animateTo(0.0,
          duration: Duration(milliseconds: 300), curve: Curves.easeOut);
    } else {
      Fluttertoast.showToast(msg: 'Nothing to send');
    }
  }

但是DateTime.now().millisecondsSinceEpoch.toString()根据用户的设备创建时间戳,这意味着如果用户A在10:00向用户B发送消息("hello"),但如果用户B回复("world"),并且他的设备时间是9:50,则它将显示在用户A的消息之前,这是假的。
大概是这样的

09:50 userB - "world"
10:00 userA - "hello"

是否有一个通用的时间格式,而不考虑设备时间?是否可以不使用外部API设置?

2ul0zpep

2ul0zpep1#

在我将代码更改为FieldValue. serverTimestamp()之前,我遇到了这个问题。
日期时间.现在().毫秒自新纪元.到字符串()更改为字段值.服务器时间戳()

所以试试这个:

{
        'idFrom': id,
        'idTo': peerId,
        'timestamp': FieldValue.serverTimestamp(),
        'content': content,
        'type': type
  },

检查以下内容:一个一个的。

相关问题