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

Flutter技术问题:如何将API返回的Map数据转换为List类型

将AltinModel转换为List的实现方案

你的AltinModel包含多个同类型(The14AyarAltin)的属性,要把这些属性转换成List,最直接高效的方式有两种:

方法一:手动收集属性到列表

获取到AltinModel实例后,直接将所有The14AyarAltin类型的属性添加到List中:

// 获取数据
AltinModel altinData = await altinGetir();

// 转换为List<The14AyarAltin>
List<The14AyarAltin> altinList = [
  altinData.onsAltin,
  altinData.gramAltin,
  altinData.ceyrekAltin,
  altinData.yarimAltin,
  altinData.tamAltin,
  altinData.cumhuriyetAltini,
  altinData.ataAltin,
  altinData.resatAltin,
  altinData.hamitAltin,
  altinData.ikibucukAltin,
  altinData.gremseAltin,
  altinData.besliAltin,
  altinData.the14AyarAltin,
  altinData.the18AyarAltin,
  altinData.the22AyarBilezik,
  altinData.gumus,
];

方法二:在AltinModel中添加转换方法

为了代码复用和可读性,可以在AltinModel类内部添加一个方法,专门返回转换后的列表:

修改AltinModel类:

class AltinModel {
  // ... 原有属性、构造函数、fromJson/toJson方法不变

  // 添加转换方法
  List<The14AyarAltin> toAltinList() {
    return [
      onsAltin,
      gramAltin,
      ceyrekAltin,
      yarimAltin,
      tamAltin,
      cumhuriyetAltini,
      ataAltin,
      resatAltin,
      hamitAltin,
      ikibucukAltin,
      gremseAltin,
      besliAltin,
      the14AyarAltin,
      the18AyarAltin,
      the22AyarBilezik,
      gumus,
    ];
  }
}

使用时只需调用该方法:

AltinModel altinData = await altinGetir();
List<The14AyarAltin> altinList = altinData.toAltinList();

可选:保留数据名称的扩展方案

如果需要同时保留每个数据对应的标识名称(比如"gram_altin"),可以创建一个辅助类来封装,再生成列表:

// 辅助类:封装名称和对应数据
class AltinNamedItem {
  final String identifier;
  final The14AyarAltin data;

  AltinNamedItem(this.identifier, this.data);
}

// 在AltinModel中添加对应方法
List<AltinNamedItem> toNamedAltinList() {
  return [
    AltinNamedItem("ons_altin", onsAltin),
    AltinNamedItem("gram_altin", gramAltin),
    AltinNamedItem("ceyrek_altin", ceyrekAltin),
    AltinNamedItem("yarim_altin", yarimAltin),
    AltinNamedItem("tam_altin", tamAltin),
    AltinNamedItem("cumhuriyet_altini", cumhuriyetAltini),
    AltinNamedItem("ata_altin", ataAltin),
    AltinNamedItem("resat_altin", resatAltin),
    AltinNamedItem("hamit_altin", hamitAltin),
    AltinNamedItem("ikibucuk_altin", ikibucukAltin),
    AltinNamedItem("gremse_altin", gremseAltin),
    AltinNamedItem("besli_altin", besliAltin),
    AltinNamedItem("14_ayar_altin", the14AyarAltin),
    AltinNamedItem("18_ayar_altin", the18AyarAltin),
    AltinNamedItem("22_ayar_bilezik", the22AyarBilezik),
    AltinNamedItem("gumus", gumus),
  ];
}

注意事项

不推荐使用反射(如reflectable包)来自动遍历属性,因为Flutter默认禁用反射机制(为了优化打包体积),手动处理更符合Flutter的性能和打包规范。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 10:35:17