Временная ошибка в функции при преобразовании Флаттера из метки времени в строку

# #flutter #dart #google-cloud-firestore

Вопрос:

Я работаю над проектом Flutter с облачным Firestore в качестве бэкенда.

Существует коллекция под названием «сообщения». В этой коллекции есть документы, которые включают поле под названием «post_fecha» из метки времени типа.

Я хотел бы показать значения для поля «post_fecha» в формате «дд-ММ-гггг ЧЧ:мм»

Для этого я создал функцию для преобразования полученной метки времени из Firestore в строку даты:

   String formatearFecha(Timestamp timestamp){
    var dateFromTimeStamp =
        DateTime.fromMillisecondsSinceEpoch(timestamp.seconds * 1000);
    return DateFormat('dd-MM-yyyy HH:mm').format(dateFromTimeStamp);
  }
 

Строка даты отображается правильно:

введите описание изображения здесь

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

Ошибка заключается в следующем:

  flutter: ══╡ EXCEPTION CAUGHT BY WIDGETS LIBRARY ╞═══════════════════════════════════════════════════════════
[        ] flutter: The following NoSuchMethodError was thrown building:
[        ] flutter: The getter 'seconds' was called on null.
[    1 ms] flutter: Receiver: null
[        ] flutter: Tried calling: seconds
[        ] flutter: 
[        ] flutter: When the exception was thrown, this was the stack:
[        ] flutter: #0      Object.noSuchMethod (dart:core-patch/object_patch.dart:51:5)
[        ] flutter: #1      TimeAgo.formatearFecha (package:flutter_movmap/src/services/time_ago.dart:10:55)
 

Строка кода, указанная в сообщении об ошибке, является:

 var dateFromTimeStamp =
        DateTime.fromMillisecondsSinceEpoch(timestamp.seconds * 1000);
 

Я вызываю функцию следующим образом:

 fecha_default = TimeAgo().formatearFecha(listaFiltrada[index].post_fecha);
 

который находится внутри StreamBuilder, который показывает сообщение в представлении списка.

Ответ №1:

Используйте эту функцию для преобразования firebase Timestamp в flutter Datetime :

DateTime toDateTime(Timestamp val) => val?.toDate();

и это для преобразования flutter Datetime в firebase Timestamp

Timestamp fromDateTime(DateTime val) => val == null ? null : Timestamp.fromDate(val);