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

Flutter运行异常Null is not subtype of Map<String,dynamic>排查求助

问题原因

  • 核心触发报错的原因是JSON键名大小写不匹配:API返回的JSON中子对象的键是驼峰写法pageInfo,但你在YouTubeSearchModel.fromJson中用json['pageinfo'](全小写)取值,取不到内容就会返回null,把null传入需要Map<String,dynamic>类型参数的PageInfoData.fromJson方法,就直接抛出了你遇到的类型不匹配异常。
  • 存在隐藏的空异常风险:PageInfoData.fromJson里你取值用的键是resultPerPage,但API返回的JSON中对应键是resultsPerPage(多了一个s),哪怕解决了第一个问题,这里也会取不到值抛出空异常。
  • 存在数据赋值错误:YouTubeSearchModel.fromJson里你把kind和etag的取值逻辑搞反了,etag取了json['kind']的值,kind取了json['etag']的值,虽然不会直接报错,但会导致字段存储数据完全错误。

修复后代码

PageInfoData 类修复

class PageInfoData {
  final int totalResults;
  final int resultsPerPage; // 字段名和JSON返回键对齐

  PageInfoData({required this.totalResults, required this.resultsPerPage});

  factory PageInfoData.fromJson(Map<String,dynamic> json) {    
    return PageInfoData(
      totalResults: json['totalResults'],
      resultsPerPage: json['resultsPerPage'], // 取值键名和JSON返回键对齐
    );
  }
}

YouTubeSearchModel 类修复

class YouTubeSearchModel {
  final String kind;
  final String etag;
  final String nextPageToken;
  final String regionCode;
  final PageInfoData pageInfo;

  YouTubeSearchModel({
    required this.kind,
    required this.etag,
    required this.nextPageToken,
    required this.regionCode,
    required this.pageInfo,
  });

  factory YouTubeSearchModel.fromJson(Map<String,dynamic>json){
    return YouTubeSearchModel(
      kind: json['kind'], // 修正反转的赋值逻辑
      etag: json['etag'], // 修正反转的赋值逻辑
      nextPageToken: json['nextPageToken'],
      regionCode : json['regionCode'],
      pageInfo: PageInfoData.fromJson(json['pageInfo']) // 修正键名大小写问题
   );
 }
}

通用排查思路

  • 遇到类型不匹配异常时,首先打印传入的原始JSON数据,确认对应键是否存在、键名拼写/大小写是否完全一致。
  • 复杂嵌套对象转换前,可以先判断json['xxx'] != null再做转换,避免空值传入类型要求严格的方法。
  • 如果API部分字段可能不存在,要把对应的Dart字段声明为可空类型,或者在取值时通过??设置默认值,避免空安全相关异常。
  • 可以用json_serializable这类官方序列化库自动生成转换代码,减少手写拼写错误的概率。

内容的提问来源于stack exchange,提问作者M.Hassan

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 21:15:11