颤振如何获得课程

时间:2020-09-26 19:08:49

标签: flutter dart

我是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);
  }

这是个好方法吗?

2 个答案:

答案 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更好;