flutter将列表值分配给类

时间:2017-07-11 19:10:24

标签: flutter

寻找将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);

}

我确信我遗漏了一些简单的东西,但是一旦我看到硬编码的值工作,就无法弄明白。

任何帮助都会很棒。

2 个答案:

答案 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反序列化库,以减少样板反序列化代码的数量:Jaguarbuilt_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