从地图创建对象 - Dart
问题描述:
我有一个包含大量属性的类,这些属性映射到我在其他地方已解析为Map
对象的某些JSON数据。我希望能够通过传入此地图来实例化一个类:从地图创建对象 - Dart
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];
}
}
}
我宁愿不必手动分配所有内容。有没有办法做我想做的事情?
答
我不认为有一种好的方法可以在语言中完成它。 反射会是一种方法,但在浏览器中避免它会是一种很好的做法,因为它会导致代码膨胀。
还有就是reflectable
包限制反射的消极影响大小,并提供几乎相同的功能。
我会使用代码生成方法,在您使用样订做,source_gen工具来生成分配值的代码。
built_value是一个使用该方法的软件包。这甚至可以直接用于你的用例。
或者,您可以将'Map'存储在'this'对象的字段中。唯一的缺点是你需要写'card.props.name'而不是'card.name' – Ganymede