Flutter中处理API返回空Features嵌套Map的问题求助
问题分析
你遇到的核心问题是不能直接把空Map{}强制类型转换为Features类实例——Dart不允许这种无意义的类型转换,会直接抛出类型转换错误。当API返回的features是空对象时,你需要创建一个合法的Features实例(比如带空属性的实例),而非强行转类型。
解决方案
根据你的场景,提供两种实用的处理方式:
方式一:给Features添加空构造函数
在Features类中新增一个空构造函数(或者给默认构造函数的所有参数设置默认值),当features为空对象时,直接返回这个合法的空实例:
修改后的PropertyInformation.fromJson方法
factory PropertyInformation.fromJson(Map<String, dynamic> json) { final featuresJson = json['features']; Features features; // 判断features是否为非空Map if (featuresJson is Map && featuresJson.isNotEmpty) { features = Features.fromJson(featuresJson); } else { // 使用空构造函数创建合法实例 features = Features.empty(); // 若Features默认构造函数已给所有参数设默认值,可直接用:features = Features(); } return PropertyInformation( // 其他属性的解析逻辑... features: features, ); }
对应的Features类修改
class Features { // 假设你的Features包含这些属性 final String? propertyName; final int? floorCount; // 常规fromJson解析方法 factory Features.fromJson(Map<String, dynamic> json) { return Features( propertyName: json['property_name'], floorCount: json['floor_count'], ); } // 空构造函数,给所有属性赋默认空值 Features.empty() : propertyName = null, floorCount = null; // 或者直接给默认构造函数加参数默认值 // Features({this.propertyName, this.floorCount}); }
方式二:让Features.fromJson兼容空Map
如果Features.fromJson方法能处理空Map(所有属性都允许为null),可以直接传入空Map,无需强制转换:
factory PropertyInformation.fromJson(Map<String, dynamic> json) { final featuresJson = json['features'] as Map<String, dynamic>; Features features = featuresJson.isNotEmpty ? Features.fromJson(featuresJson) : Features.fromJson({}); // 直接传空Map给fromJson解析 return PropertyInformation( // 其他属性解析逻辑... features: features, ); }
注意:这种方式要求Features.fromJson能适配空Map,即不会因为缺少key而抛出异常,所有属性都设为null或合理默认值。
额外提示
- 解析JSON时建议先做类型判断(比如
json['features'] is Map),避免类型转换异常; - 如果API返回的
features可能是null而非仅空对象,需补充null判断:final featuresJson = json['features']; if (featuresJson == null || (featuresJson is Map && featuresJson.isEmpty)) { // 返回空Features实例 }
内容的提问来源于stack exchange,提问作者LostTexan
相关产品推荐
相关产品推荐

