2016-11-30 11 views
2

私は、他の場所のMapオブジェクトに解析されたいくつかのJSONデータにマップする多数のプロパティを持つクラスを持っています。Map - 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]; 
    } 
    } 
} 

すべてを手動で割り当てる必要はありません。私はこのマップを渡すことでクラスをインスタンス化することができます。私がやろうとしていることをする方法はありますか?

答えて

2

私は言語自体でそれを行う良い方法はないと思います。 リフレクションは1つのアプローチですが、コードが肥大化する可能性があるため、ブラウザでリフレクションを避けることをお勧めします。

リフレクションの負の影響を制限し、ほとんど同じ機能を提供するreflectableパッケージがあります。

ビルドのようなツールを使用するコード生成アプローチを使用します。source_genは、値を割り当てるコードを生成します。

built_valueは、このアプローチを使用するパッケージです。これはあなたのユースケースのために直接働くかもしれません。

+0

また、 'this'オブジェクトのフィールドに' Map'を格納することもできます。唯一の欠点は 'card.name'の代わりに' card.props.name'のようなものを書く必要があることです – Ganymede

関連する問題