用列表 <Objects> 或列表<Map<String, String> 填充多选>

Fill Multiselect with List <Objects> or List<Map<String, String>>

也许有人经历过同样的事情,我试图用我的 Class 对象的列表数据填充多选,但它不允许我

List <Users> _datasource = ...(get data)
...
MultiSelect(
  dataSource: _datasource,
  textField: 'name',
  valueField: 'id'
  .... )

我看到它接受的数据源类型为:List<Map<String,String>>,但我不知道如何转换我的 List<Users> to List<Map<String,String>>,也许你遇到过并且可以与之合作我.

 class UserModel {
  UserModel({
    this.id,
    this.name = '',
  });
  String id;
  String name;
  factory UserModel.fromJson(Map<String, dynamic> json) => UserModel(
        id: json["id"].toString(),
        name: json["name"],
      );
  Map<String, dynamic> toJson() => {
        "id": id,
        "name": name,
      };
}

提前致谢

您需要将 List<User> 转换为 List<Map<String, String>> :

List<User> users = ...(get data)
List<Map<String, String>> datasource = users.map((user) => {user.id: user.name}).toList();
// Or using spread operator :
List<Map<String, String>> datasource = [...users.map((user) => {user.id: user.name})];
// Or using collection for :
List<Map<String, String>> datasource = [for (final user in users) {user.id: user.name}]

您可以尝试映射您的用户列表并将其转换为 List<Map<String,String>>。类似于:

var data = _datasource.map((user) => user.toJson()).toList();
});

MultiSelect(
  dataSource: data,
  textField: 'name',
  valueField: 'id'
  .... )