2017-07-11 27 views
0

Suchen nach Hilfe zum Zuweisen von Listenwerten zu einer Klasse. Hier ist meine Klasse.flattern Listenwerte einer Klasse zuweisen

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


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

} 

Ich habe eine Liste von JSON erstellt und ich habe bestätigt, es Werte hat, kann aber nicht die Werte erhalten zugewiesen, um die Klasse zu instanziieren. Ich weiß, dass die Klasse funktioniert, wenn ich Werte fest programmiere, wird es gut erstellt.

Dies ist, wie ich versuche es zu tun und kann nicht finden, warum es nicht funktioniert.

Ich bin sicher, ich vermisse etwas leicht, aber sobald ich hardcoded Werte arbeiten sah, kann es nicht herausfinden.

Jede Hilfe wäre großartig.

Antwort

1

Es scheint, als ob Sie von einem JavaScript-Hintergrund kommen, wo object.property object['property'] gleichwertig sind. In Dart sind sie nicht. Wenn Sie ein JSON-Objekt analysiert haben, wird es zu einem Dart Map mit String Schlüsseln. Ändern Sie Ihre getSpec Funktion, um operator[] anstelle der Punktsyntax zu verwenden, um die Einträge von Map zu lesen.

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

Sie möchten Specialties einen zusätzlichen fromMap Konstruktor, anstatt den Bau es in einer externen Funktion zu prüfen, zu geben. Sie sollten auch die Felder Specialtiesfinal sein, da sein Konstruktor const ist.

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']); 
} 

Dann können Sie

sagen
new Specialties.fromMap(mylist[index]) 

Schließlich gibt es einige andere JSON Deserialisierung Bibliotheken, die Sie vielleicht prüfen, um die Menge an vorformulierten Deserialisierung Code zu reduzieren: Jaguar, built_value.

+0

Das hat super funktioniert. Ja Javascript und andere Sprachen mit Punktnotation. Haben Sie ein Beispiel für den fromMap-Konstruktor? Wie würde es den Auftrag ändern? Nochmals vielen Dank für die schnelle und direkte Antwort. – Robert

+0

Bearbeitete meine Antwort, um ein Codebeispiel einzuschließen –

0

Wenn Sie einen JSON-String in Form von '[{"id": 1, "name": "ab", "details": "blabla"},{...}]' haben, können Sie es wie folgt zu konvertieren:

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

Sie dart:convert importieren müssen, um die Methode zu bekommen JSON.decode