寻找将List值分配给类的帮助。这是我的班级。
class Specialties {
int id;
String name;
String details;
const Specialties(this.id, this.name, this.details);
}
我有一个从JSON创建的List,我已经确认它有值,但无法获取分配给实例化类的值。我知道这个类的工作方式就像我硬编码它创建的值一样。
这就是我尝试这样做的方法,但无法找到它无效的原因。
Specialties getSpec(int index) {
return new Specialties(mylist[index].id, mylist[index].name, mylist[index].details);
}
我确信我遗漏了一些简单的东西,但是一旦我看到硬编码的值工作,就无法弄明白。
任何帮助都会很棒。
答案 0 :(得分:1)
好像你可能来自object.property
的JavaScript背景
object['property']
是等价的。在达特,他们不是。
如果解析了JSON对象,它将变为带有Map
键的Dart String
。修改您的getSpec
函数以使用operator[]
代替点语法来阅读Map
的条目。
Specialties getSpec(int index) {
return new Specialties(mylist[index]['id'], mylist[index]['name'], mylist[index]['details']);
}
您可能需要考虑为Specialties提供额外的fromMap
构造函数,而不是在外部函数中构造它。您还应将Specialties
的字段设为final
,因为其构造函数为const
。
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反序列化库,以减少样板反序列化代码的数量:Jaguar,built_value。
答案 1 :(得分:0)
如果你有一个'[{"id": 1, "name": "ab", "details": "blabla"},{...}]'
形式的JSON字符串,你可以像这样转换它:
List<Specialties> specialties(String jsonstring) {
List parsedList = JSON.decode(jsonstring);
return parsedList.map((i) => new Specialties(
i["id"], i["name"], i["details"]));
}
您必须导入dart:convert
才能获得方法JSON.decode