flutter 将列表值分配给 class

flutter assign list values to a class

寻求有关将列表值分配给 class 的帮助。这是我的 class.

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


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

}

我有一个从 JSON 创建的列表,我已经确认它有值,但无法获取分配给实例化 class 的值。我知道 class 的工作原理与我对值进行硬编码时一样,它创建得很好。

这就是我正在尝试的方式,但找不到它不起作用的原因。

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

}

我确定我遗漏了一些简单的东西,但是一旦我看到硬编码值起作用,就无法理解。

任何帮助都会很棒。

您似乎来自 JavaScript 背景 object.property object['property'] 是等价的。在 Dart 中,它们不是。

如果你解析了一个 JSON 对象,它将变成一个带有 String 键的 Dart Map。修改您的 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.

如果您有 '[{"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