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

Flutter Web解析API响应报错:期望Map<String,dynamic>却得到Null

报错根因

Expected a value of type 'Map<String, dynamic>', but got one of type 'Null' 报错由模型定义与接口返回结构不匹配直接触发:

  • 你预先校验的是接口整体响应体非空,但嵌套字段存在null值:返回列表中id为5、6的条目下,forBatch节点的result字段实际返回值为null
  • Freezed生成的序列化模型中,该result字段被定义为非空必填的Map<String, double>类型,默认生成的fromJson逻辑会对字段做强制类型转换,遇到null值时直接抛出类型不匹配错误,不会自动执行空值兜底。
解决方案

选择对应方案修改模型代码后,重新执行Freezed代码生成命令即可生效:

flutter pub run build_runner build --delete-conflicting-outputs
  • 对齐接口返回结构,允许字段为空
    将ForBatch类中result字段的类型从非空Map<String, double>修改为可空类型Map<String, double>?,完全适配接口返回null的场景,后续业务逻辑调用该字段时补充判空处理即可。
  • 配置默认值兜底,简化后续业务判空逻辑
    如果业务逻辑要求该字段始终为Map类型,可通过Freezed的@Default注解给字段配置空Map默认值,接口返回null时会自动填充默认值,不会触发类型报错,示例代码:
    @freezed
    class ForBatch with _$ForBatch {
      const factory ForBatch({
        @Default(<String, double>{}) Map<String, double> result,
        // 其余同原有字段定义
      }) = _ForBatch;
    
      factory ForBatch.fromJson(Map<String, dynamic> json) => _$ForBatchFromJson(json);
    }
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 22:01:19