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

Flutter JSON解析报错:Null不是Map<String,dynamic>子类型问题求助

修复Flutter中ServiceModel解析null data字段的类型转换错误

问题原因

当接口返回data: null时,你的ServiceModel中data字段被定义为非空的Map<String, dynamic>,Dart的类型安全机制不允许将null赋值给非空类型,因此抛出type 'Null' is not a subtype of type 'Map<String, dynamic>'异常。

修复步骤

1. 修改Model的字段类型

将data字段改为可空类型,允许接收null值:

class ServiceModel {
  final bool success;
  final Map<String, dynamic>? data; // 改为可空Map类型
  final String? error;

  ServiceModel({
    required this.success,
    this.data, // 移除required修饰符
    this.error,
  });
}

2. 调整fromJson构造函数

在解析data时,显式处理null情况,避免强制类型转换报错:

factory ServiceModel.fromJson(Map<String, dynamic> json) {
  return ServiceModel(
    success: json['success'] as bool,
    // 允许将null转为可空Map类型
    data: json['data'] as Map<String, dynamic>?,
    error: json['error'] as String?,
  );
}

3. 适配实体类场景(如果data对应具体Model)

如果data是某个具体实体类(比如UserModel),同样要将其改为可空类型,并在解析时判断null:

class ServiceModel {
  final bool success;
  final UserModel? data; // 可空实体类类型
  final String? error;

  ServiceModel({required this.success, this.data, this.error});

  factory ServiceModel.fromJson(Map<String, dynamic> json) {
    return ServiceModel(
      success: json['success'] as bool,
      // 仅当data不为null时才解析实体类
      data: json['data'] != null ? UserModel.fromJson(json['data'] as Map<String, dynamic>) : null,
      error: json['error'] as String?,
    );
  }
}

UI层错误信息展示

解析完成后,通过success状态判断是否展示错误信息:

// 假设接口返回的JSON已转为Map<String, dynamic>
final responseJson = await yourApiCall();
final serviceModel = ServiceModel.fromJson(responseJson);

if (serviceModel.success) {
  // 处理正常数据逻辑,注意先判断data是否为null
  if (serviceModel.data != null) {
    // 操作data内容
  }
} else {
  // 展示错误提示
  showDialog(
    context: context,
    builder: (_) => AlertDialog(
      title: const Text('请求失败'),
      content: Text(serviceModel.error ?? '未知错误'),
      actions: [
        TextButton(
          onPressed: () => Navigator.pop(context),
          child: const Text('确定'),
        ),
      ],
    ),
  );
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.15 02:42:13