Flutter+Firebase日历CRUD开发的日期格式转换类型错误问题
解决Flutter中Firebase时间戳转DateTime的类型错误
错误原因
你将DateTime对象转换为**微秒级时间戳(int类型)**存储到Firebase,但读取数据时直接将这个int值传入DateFormat.format()方法——该方法仅接受DateTime类型参数,因此抛出type 'int' is not a subtype of type 'DateTime'类型不匹配错误。
解决方案
读取数据时,将Firebase返回的int类型时间戳,通过DateTime.fromMicrosecondsSinceEpoch()方法还原为DateTime对象,再传入DateFormat.format()处理。
修改后的代码片段
替换你获取数据部分的subtitle代码:
return Card( margin: const EdgeInsets.all(10), child: ListTile( title: Text(documentSnapshot['name']), // 修正后的日期格式化代码 subtitle: Text(DateFormat("EEEE, dd MMMM, yyyy") .format(DateTime.fromMicrosecondsSinceEpoch(documentSnapshot['date'] as int))), // ... 其他代码 ), );
可选优化(空安全与异常防护)
为避免空值或类型异常,可添加空判断与类型检查:
subtitle: Text( documentSnapshot['date'] is int ? DateFormat("EEEE, dd MMMM, yyyy").format( DateTime.fromMicrosecondsSinceEpoch(documentSnapshot['date'] as int)) : "日期未设置", ),
关键注意点
- 必须使用
fromMicrosecondsSinceEpoch:因为你存储时调用的是DateTime.microsecondsSinceEpoch,如果误用fromMillisecondsSinceEpoch会导致日期计算偏差(相差1000倍)。 - 若后续改为存储毫秒时间戳,需同步替换为
DateTime.fromMillisecondsSinceEpoch()。
内容的提问来源于stack exchange,提问作者saad jlassi
相关产品推荐
相关产品推荐

