Приложение чата Flutter сохраняет метку времени сообщения с устройства - PullRequest
0 голосов
/ 23 февраля 2020

У меня проблема с созданием одной и той же отметки времени в сообщениях, которые пользователи доставляют друг другу.

Это функция отправки сообщения:

  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() создает отметка времени в зависимости от устройства пользователя. Это означает, что если пользователь А отправляет сообщение («привет») пользователю В в 10:00, но если пользователь В отвечает («мир») и время его устройства составляет 9:50, оно будет показано перед сообщением пользователя А, которое является ложным.

Примерно так:

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

Существует ли общий формат времени независимо от времени устройства? Можно ли установить без использования внешнего API?

1 Ответ

1 голос
/ 23 февраля 2020

У меня была эта проблема, прежде чем я изменил свой код на FieldValue.serverTimestamp () .

Изменить DateTime.now (). MillisecondsSinceEpoch.toString () до FieldValue.serverTimestamp () .

Так попробуйте это:

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

Проверьте это: FieldValue Firebase , Флаттер: Firebase FieldValue.serverTimestamp () .

Надеюсь, это помогло !!

...