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
寻求有关将列表值分配给 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