2017-07-11 11 views
0

クラスにリスト値を割り当てるためのヘルプを探しています。ここに私のクラスです。フラッターはクラスにリスト値を割り当てます

class Specialties { 
    int id; 
    String name; 
    String details; 


    const Specialties(this.id, this.name, this.details); 

} 

私はJSONから作成されたリストを持っていると私はそれが値を持って確認しているが、クラスをインスタンス化するために割り当てられた値を取得することはできません。私は、クラスがうまく作成された値をハードコードするときにクラスが動作することを知っています。

これは私がそれをやろうとしているもので、なぜ動作しないのかわかりません。

Specialties getSpec(int index) { 
    return new Specialties(mylist[index].id, mylist[index].name, mylist[index].details); 

} 

私は何かが簡単ではないと確信していますが、一度ハードコードされた値が動作するのを見たら、それを理解できません。

助けがあれば助かります。

答えて

1

object.property のJavaScriptの背景から来ているようです。ダーツでは、そうではありません。

JSONオブジェクトを解析すると、Stringキーを使用してDart Mapになります。 getSpec関数を変更して、ドット構文の代わりにoperator[]を使用してMapのエントリを読み取ります。

Specialties getSpec(int index) { 
    return new Specialties(mylist[index]['id'], mylist[index]['name'], mylist[index]['details']); 
} 

あなたは、外部関数でそれを構築するのではなく、専門分野に追加fromMapコンストラクタを与えることを検討することをお勧めします。また、コンストラクタがconstであるため、Specialtiesのフィールドをfinalにする必要があります。 Jaguarbuilt_value

class Specialties { 
    final int id; 
    final String name; 
    final String details; 
    const Specialties(this.id, this.name, this.details); 
    factory Specialties.fromMap(Map data) => new Specialties(data['id'], data['name'], data['details']); 
} 

次にあなたが

new Specialties.fromMap(mylist[index]) 

を言うことができる最後に、あなたは定型、デシリアライゼーションコードの量を減らすことを検討する必要がありますいくつかの他のJSONデシリアライゼーションライブラリがあります。あなたはこのようにそれを変換することができます'[{"id": 1, "name": "ab", "details": "blabla"},{...}]'の形でJSON文字列がある場合

+0

を取得するためにdart:convertをインポートする必要があります。はいドット表記法を使用したJavascriptやその他の言語。 fromMapコンストラクタの例がありますか?どのように割り当てが変更されますか?クイックとオンポイントの応答に感謝します。 – Robert

+0

コードサンプルを含めるために私の答えを編集しました –

0

List<Specialties> specialties(String jsonstring) { 
    List parsedList = JSON.decode(jsonstring); 
    return parsedList.map((i) => new Specialties(
    i["id"], i["name"], i["details"])); 
} 

をあなたは、これは素晴らしい仕事方法JSON.decode

関連する問題