我是Flutter的新手,我想知道如何获取类User的特定项。
这是我的班级用户:
class UsersList{
List<User> users;
UsersList({
this.users
});
factory UsersList.fromJson(List<dynamic> json) {
List<User> users= List<User>();
users= json.map((i) => User.fromJson(i)).toList();
return UsersList(
users : users
);
}
Map<String, dynamic> toJson() => {
"users": users,
};
@override
String toString() {
return '{'
'users: ${this.users},'
'}';
}
}
class User{
int type;
String name;
bool gender;
User({
this.type,
this.name,
this.gender,
});
factory User.fromJson(Map<String, dynamic> json){
return User(
type : json['type'],
name: json['name'],
gender : json['gender'],
);
}
Map<String, dynamic> toJson() => {
"type" : type,
"name" : name,
"gender" : gender,
};
@override
String toString() {
return '{'
'type : ${this.type},'
'name: ${this.name},'
'gender : ${this.gender},'
'}';
}
}
我想获得一个特定的用户,这是我的职责: 我的函数中有一个关键参数,能够根据我想要的值(例如姓名,性别,...)进行搜索,但是我看不到如何在我的班级中使用此参数,因为它没有认识钥匙?
static User getUser(var value, String key, UsersList items)
{
print(items.users.where((c) => (c.key == value)).toList().first);
}
这是个好方法吗?
答案 0 :(得分:1)
您要使用密钥访问用户,为此,您可以使用toJson()方法,例如
static User getUser(var value, String key, UsersList items){
return users.where((c) => (c.toJson()['name'] == 'name')).toList().first;
}
在“用户”对象中,您将性别称为“布尔”,这种做法会造成混淆,可以将其命名为isMale / isFemale,这样以后就不会混淆了。
答案 1 :(得分:1)
由于键的数量较少,因此在代码中手动执行映射的性能会更高:
static User getUser(var value, String key, UsersList items) {
bool Function(User) matchingFn;
if (key == 'name') {
matchingFn = (c) => c.name == value;
} else if (key == 'type') {
matchingFn = (c) => c.type == value;
} else if (key == 'gender') {
matchingFn = (c) => c.gender == value;
}
return items.users.firstWhere(matchingFn);
}
.firstWhere(fn)
也比.where(fn).toList().first
更好;