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

Flutter使用WooCommerce API映射商品图片列表报错及Dart类建模咨询

问题修复方案

你遇到的报错是Dart空安全特性移除了默认的List()构造函数导致的,同时现有代码还存在字段key写错、空值未兜底的问题,修复后的完整代码如下:

class ProductModel {
  // 建议根据接口返回情况调整为可空类型(如String? name),避免字段缺失时报错
  late String name;
  late int id;
  late String status;
  late String price;
  late List<ImageModel> images;

  ProductModel(
    this.name,
    this.id,
    this.status,
    this.images,
    this.price,
  );

  ProductModel.fromJson(Map<String, dynamic> json) {
    name = json['name'] ?? '';
    id = json['id'] ?? 0;
    status = json['status'] ?? '';
    price = json['price'] ?? '';
    // 一行完成图片列表序列化,自动处理空值、类型转换
    images = (json['images'] as List<dynamic>?)
            ?.map((v) => ImageModel.fromJson(v))
            .toList() ??
        [];
  }

  Map<String, dynamic> toJson() {
    final Map<String, dynamic> data = <String, dynamic>{};
    data['name'] = name;
    data['id'] = id;
    data['status'] = status;
    data['images'] = images.map((v) => v.toJson()).toList();
    data['price'] = price;
    return data;
  }
}

// 类名改用大驼峰,避免和Flutter自带Image组件重名
class ImageModel {
  late int id;
  late String src;
  late String title;

  ImageModel({
    this.id = 0,
    this.src = "",
    this.title = "",
  });

  ImageModel.fromJson(Map<String, dynamic> json) {
    id = json['id'] ?? 0;
    src = json['src'] ?? '';
    title = json['title'] ?? '';
  }

  Map<String, dynamic> toJson() {
    final Map<String, dynamic> data = <String, dynamic>{};
    data['id'] = id;
    data['src'] = src;
    data['title'] = title;
    return data;
  }
}
核心修改说明
  • 删除了错误的images = json['image'];赋值语句,避免类型不匹配报错
  • 空安全下使用[]初始化可增长列表,替代已禁用的List<Images>()构造函数
  • 增加空值兜底逻辑,接口返回images为null时自动赋值空数组,避免late字段未初始化报错
  • 所有字段增加默认值,避免接口返回字段缺失时的运行时异常
JSON转Dart类最佳实践
  • 优先使用官方推荐的json_serializable自动生成序列化代码,避免手写出现拼写错误、类型转换问题,生成的代码天然适配空安全
  • 明确字段可空性,不要滥用late关键字,如果接口存在返回null的可能,直接声明为可空类型(如String? name)
  • 列表类型序列化优先使用map转换的写法,代码更简洁,不需要手动循环添加元素
  • 类名遵守Dart大驼峰规范,避免和系统自带类重名产生冲突
  • 所有字段转换时增加默认值兜底,不要直接强制取值,避免接口字段变动导致应用崩溃

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 15:06:03