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

Flutter API请求应用报错:Null不是DateTime子类型求助

解决Flutter中type 'Null' is not a subtype of type 'DateTime'异常

这个异常的核心原因是:你在解析API返回的日期字段时,该字段的值为null,但代码里强制要求它是非空的DateTime类型,导致类型转换失败。

排查与修复步骤:

  • 先确认API返回数据:打印接口返回的完整JSON,检查对应日期字段(比如created_at、update_time这类)是否存在null值。大概率是后端接口最近调整,某些场景下该字段不再返回或返回空值。
  • 修改数据模型类:
    1. 如果业务允许日期字段为空:把模型中的DateTime改为可空类型DateTime?,并在解析时判断null:
      class ApiResponseModel {
        final DateTime? targetDate;
      
        ApiResponseModel({this.targetDate});
      
        factory ApiResponseModel.fromJson(Map<String, dynamic> json) {
          return ApiResponseModel(
            targetDate: json['target_date'] != null 
                ? DateTime.parse(json['target_date']) 
                : null,
          );
        }
      }
      
    2. 如果业务要求日期字段必须有值:给null场景设置默认值,比如当前时间:
      targetDate: DateTime.parse(
        json['target_date'] ?? DateTime.now().toIso8601String()
      ),
      
  • UI层处理可空值:如果用了可空类型,在展示时要先判断是否为null,避免后续错误:
    Text(
      model.targetDate != null 
          ? DateFormat('yyyy-MM-dd').format(model.targetDate!) 
          : '暂无数据'
    )
    
  • 调试小技巧:在解析JSON前先打印原始数据,快速定位哪个字段出问题:
    print('原始API响应: $json');
    

之前运行正常是因为后端一直返回非空的日期值,近期接口变更才触发了这个隐藏的类型兼容问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 05:52:41