首页 > 解决方案 > Flutter中从时间戳转换为字符串的函数出现临时错误

问题描述

我正在开发一个以 Cloud Firestore 作为后端的 Flutter 项目。

有一个名为“帖子”的集合。该集合的文档包括时间戳类型中名为“post_fecha”的字段。

我想以 'dd-MM-yyyy HH:mm' 格式显示字段 '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 中,它在 ListView 上显示帖子。

标签: flutterdartgoogle-cloud-firestore

解决方案


使用此函数将 firebase 转换Timestamp为 flutter Datetime

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

这将颤振转换Datetime为火力Timestamp

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


推荐阅读