You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Flutter使用StreamBuilder时遇Timestamp与DateTime类型不匹配错误求助

Flutter StreamBuilder数据类型不匹配问题解决

错误信息

type 'Timestamp' is not a subtype of type 'DateTime?'

问题原因

Firebase Firestore存储DateTime类型数据时,会自动将其转换为Timestamp类型保存。但读取数据时,直接把Firestore返回的Timestamp赋值给MessageModel里的DateTime? createdon变量,就会触发类型不匹配错误。

解决方案

修改MessageModel的fromMap构造方法,将Firestore返回的Timestamp类型转换为DateTime类型即可:

修改后的MessageModel类

class MessageModel {
  String? messageid;
  String? sender;
  String? msg;
  bool? isseen;
  DateTime? createdon;

  MessageModel({this.messageid, this.sender, this.createdon, this.isseen, this.msg});

  MessageModel.fromMap(Map<String, dynamic> map) {
    messageid = map['messageid'];
    sender = map['sender'];
    msg = map['msg'];
    isseen = map['isseen'];
    // 关键修改:将Timestamp转换为DateTime,兼容null情况
    createdon = map['createdon'] != null ? (map['createdon'] as Timestamp).toDate() : null;
  }

  Map<String, dynamic> toMap() {
    return {
      'messageid': messageid,
      'sender': sender,
      'msg': msg,
      'isseen': isseen,
      'createdon': createdon,
    };
  }
}

额外说明

  • 写入Firestore时直接传入DateTime类型是正常的,Firestore会自动转成Timestamp存储,所以你的sendmessage函数无需修改。
  • 如果项目中有大量时间类型需要处理,也可以用json_serializable配合Cloud Firestore的序列化支持,自动完成类型转换,减少手动编码量。

内容的提问来源于stack exchange,提问作者Irfan Ganatra

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.12 12:15:31