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

Flutter日期处理报错:type 'Null' is not a subtype of type 'String' toIso8601String

报错成因
  • 核心问题为空值未做校验,触发了空安全类型不匹配:
    • 反序列化阶段:若接口返回的JSON中payment_date字段为null,DateTime.parse()要求传入非空String类型参数,直接传入null就会触发类型不匹配报错
    • 序列化阶段:若代码逻辑中paymentDate实际赋值为null,调用toIso8601String()方法时同样会因为空值触发报错
  • 额外问题:你当前将paymentDate声明为required非空DateTime类型,如果业务场景中支付日期本身允许为空,该字段声明本身就不符合实际逻辑。
解决方案

按照业务要求分为两种场景处理:

场景1:支付日期为必填项,不允许为空

反序列化阶段增加空值判断,空值时赋值默认值或抛出业务异常即可:

// 反序列化逻辑调整
paymentDate: json["payment_date"] != null 
    ? DateTime.parse(json["payment_date"] as String) 
    : DateTime.now(), // 可替换为自定义默认时间,也可以直接抛出业务异常

序列化阶段非空类型无需额外调整,直接沿用原有逻辑即可:

"payment_date": paymentDate.toIso8601String()

场景2:支付日期允许为空

首先调整字段声明,改为可空类型并移除required修饰:

final DateTime? paymentDate;

调整反序列化逻辑,空值时直接返回null:

paymentDate: json["payment_date"] != null 
    ? DateTime.parse(json["payment_date"] as String) 
    : null;

调整序列化逻辑,空值时返回null即可:

"payment_date": paymentDate?.toIso8601String(),

内容的提问来源于stack exchange,提问作者Mahar Catur Ferniza

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 18:39:05