在用户相互传递的消息中创建相同的时间戳时遇到问题。
这是一个发送消息的函数:
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设置?
1条答案
按热度按时间2ul0zpep1#
在我将代码更改为FieldValue. serverTimestamp()之前,我遇到了这个问题。
将日期时间.现在().毫秒自新纪元.到字符串()更改为字段值.服务器时间戳()。
所以试试这个:
检查以下内容:一个一个的。