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

Flutter模型使用时DateTime类型转换异常的排查与解决

问题:API数据转Hive模型时DateTime字段类型不匹配异常

我在移动应用中通过API获取数据并存储到Hive box时,DateTime字段抛出了类型不匹配的异常。

API返回的原始数据

{"pointOfServiceNo":"3","pointOfServiceName":"DEANO POS 2","pointOfServiceDescription":"DEANO POS 2","pointOfServiceOrderingGroupNo":"113-1","orders":[{"orderType":"inventory","orderDate":"2022-12-08","deliveryDate":"2022-12-08"}]}

抛出的异常

Exception has occurred. _TypeError (type 'String' is not a subtype of type 'DateTime?')

我的Model方法代码

List<Orders> ordersListFromJson(String val) => List<Orders>.from(json.decode(val)['orders'].map((val) => Orders.ordersInfofromJson(val)));

@HiveType(typeId: 2)
class Orders extends HiveObject {
@HiveField(0)
String? orderType;
@HiveField(1)
DateTime? orderDate;
@HiveField(2)
DateTime? deliveryDate;
@HiveField(3)
List<Articles>? articles;

Orders({this.orderType, this.orderDate, this.deliveryDate, this.articles});

factory Orders.ordersInfofromJson(Map<String, dynamic> orders) => Orders(
  orderType: orders['orderType'],
  orderDate: orders[DateTime.tryParse('orderDate')],
  deliveryDate: orders[DateTime.tryParse('deliveryDate')],
  articles: List<Articles>.from(orders['articles']
      .map((articles) => Articles.articlesfromJson(articles))));
 }

问题原因与修复方案

错误点解析

你在解析orderDate和deliveryDate时逻辑完全颠倒了:

  1. 错误地把字段名'orderDate'直接传给DateTime.tryParse(),而不是先从orders字典中取出对应的日期字符串值。
  2. 用解析结果作为key去orders字典中取值,导致类型彻底不匹配。

修复后的代码

factory Orders.ordersInfofromJson(Map<String, dynamic> orders) => Orders(
  orderType: orders['orderType'],
  // 先取出字符串日期,再解析为DateTime对象
  orderDate: DateTime.tryParse(orders['orderDate'] ?? ''),
  deliveryDate: DateTime.tryParse(orders['deliveryDate'] ?? ''),
  // 增加空判断,避免articles字段不存在时抛出异常
  articles: orders['articles'] != null 
      ? List<Articles>.from(orders['articles'].map((articles) => Articles.articlesfromJson(articles)))
      : null);

额外注意事项

  • 加?? ''是为了防止API返回日期字段为null时,DateTime.tryParse()接收null参数报错。
  • 对articles字段增加空判断,避免API返回的订单数据中没有该字段时触发空指针异常。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 09:40:32