从Map - Dart创建对象

时间:2016-11-30 05:05:37

标签: dart

我有一个包含大量属性的类,这些属性映射到我在别处解析为Map对象的一些JSON数据。我想通过传入这个地图来实例化一个类:

class Card {
  String name, layout, mana_cost, cmc, type, rarity, text, flavor, artist,
      number, power, toughness, loyalty, watermark, border,
      timeshifted, hand, life, release_date, starter, original_text, original_type,
      source, image_url, set, set_name, id;

  int multiverse_id;

  List<String> colors, names, supertypes, subtypes, types, printings, variations, legalities;
  List<Map> foreign_names, rulings;

  // This doesn't work
  Card.fromMap(Map card) {
    for (var key in card.keys) {
      this[key] = card[key];
    }
  }
}

我宁愿不必手动分配所有内容。有办法做我想做的事吗?

1 个答案:

答案 0 :(得分:2)

我认为在语言本身中有一种很好的方法。 反思将是一种方法,但在浏览器中避免它是一种好的做法,因为它可能导致代码膨胀。

reflectable包可以限制反射的负面影响,并提供几乎相同的功能。

我使用代码生成方法,您可以使用build,source_gen等工具生成分配值的代码。

built_value是一个使用该方法的包。这甚至可能直接适用于您的用例。