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

Flutter解析API JSON列表报错:Null不是bool子类型

Flutter JSON解析问题修复指南

一、修复“type 'Null' is not a subtype of type 'bool'”错误

这个错误的核心原因是:JSON中某个预期为bool类型的字段返回了null,但实体类里对应的字段被定义为非空bool类型,导致解析时类型不匹配。修复方法有三种:

1. 将实体类字段改为可空类型

直接把报错的bool字段声明为bool?,允许其接收null值。比如:

// 修改前
final bool ownerOccupied;

// 修改后
final bool? ownerOccupied;

同时在fromJson工厂方法中调整解析逻辑:

ownerOccupied: json['ownerOccupied'] as bool?,

2. 给字段设置默认值

如果业务逻辑要求字段不能为null,可以在解析时给null值设置默认的bool值(true/false):

ownerOccupied: json['ownerOccupied'] as bool? ?? false,

这样即使JSON返回null,也会用默认值填充,避免类型错误。

3. 协调后端修正返回值

如果接口设计上该字段应该始终返回true/false而非null,可以和后端开发人员沟通,让他们修正API返回的JSON数据,确保bool类型字段不返回null。


二、处理实体类与JSON字段不匹配问题

1. 补充实体类未覆盖的JSON字段(如ownerOccupied)

  • 手动在对应的实体类中添加缺失的字段,根据JSON的实际类型声明为可空或非空类型。
  • 在fromJson方法中添加该字段的解析逻辑。

示例:

class Property {
  // 原有字段
  final String id;
  // 添加缺失的字段
  final bool? ownerOccupied;

  Property({required this.id, this.ownerOccupied});

  factory Property.fromJson(Map<String, dynamic> json) => Property(
        id: json['id'] as String,
        ownerOccupied: json['ownerOccupied'] as bool?,
      );
}

2. 处理实体类存在但JSON中没有的字段(如Features中的pool)

方案一:改为可空类型

把JSON中不存在的字段声明为可空类型,解析时自然会得到null:

class Features {
  final bool? pool;

  Features({this.pool});

  factory Features.fromJson(Map<String, dynamic> json) => Features(
        pool: json['pool'] as bool?,
      );
}

方案二:设置默认值

如果希望字段始终有值,可以给不存在的字段设置默认值:

class Features {
  final bool pool;

  Features({required this.pool});

  factory Features.fromJson(Map<String, dynamic> json) => Features(
        pool: json['pool'] as bool? ?? false,
      );
}

方案三:删除冗余字段

如果这些字段在业务逻辑中完全没用,直接从实体类中删除即可,减少代码冗余。


额外提示

使用quicktype生成实体类时,记得开启Allow Nullable Fields选项,生成的代码会自动处理可能为null的字段,减少后续手动修改的工作量。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 22:52:39