# #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);