将另一个属性添加到 Flutter 中的现有列表

Add an another attribute to an existing List in Flutter

我一直在尝试多种方法来将 isChecked: false 属性添加到我的 Flutter 项目中 _filterOptions 列表中的每个列表。我找不到任何解决方案。如果有任何解决方案,我很高兴看到它。

List<dynamic> _filters = [];
List<List<dynamic>> _filterOptions =[];
var filters =
    await json.decode(data)["getProductsByStore"]["aggregations"];
    for(int i = 0; i < filters.length; i++){
      _filters.add(filters[i]["label"]);
      _filterOptions.add(filters[i]["options"]);

    }
    //print(filters[0]["options"]);
    //print(_filters);
    print(_filterOptions);

我在打印时得到了这种嵌套列表,我想将属性添加到每个列表。

举个例子: [[{count: 3, label: 30-40, value: 30_40, isChecked:false}], [{count: 2, label: Bagged , value: 50, isChecked:false}, {...},{...}...]]

使用您的数据和 bool isChecked

创建模型 class
class ModelClass{
  String? label;
  int? count;
  List? options;
  bool? isChecked;

  ModelClass({this.label, this.count , this.options, this.isChecked = false});

  ModelClass.fromJson(Map<String, dynamic> json){
    label = json['label'];
    count = json['count'];
    options = json['options'];
  }

}

然后你可以像下面的代码一样添加数据

 List<ModelClass> list = [];

  void function()async{
    List<dynamic> _filters = [];
    List<List<dynamic>?> _filterOptions =[];
    var filters =
        await json.decode(data)["getProductsByStore"]["aggregations"];
    for(int i = 0; i < filters.length; i++){
      ModelClass modelClass = ModelClass.fromJson(filters[i]);
      list.add(modelClass);

      _filters.add(modelClass.label);
      _filterOptions.add(modelClass.options);

    }
    print(list[0].options);
    print(list[0].isChecked);

  }

如果你想修改某个特定索引的 isChecked

list[0].isChecked = false;

只需添加这些行。

class YourWrapperClass {
  YourWrapperClass({this.filterOptions = const [], this.isChecked = false});
  List<List<dynamic>> filterOptions;
  bool isChecked;
}

YourWrapperClass filterWrapper = YourWrapperClass(filterOptions: _filterOptions, isChecked: false);

并在您需要访问 _filterOptions.

时使用此包装器 class 对象

但是,我更愿意推荐在列表元素上使用 WrapperClass,就像这样。

class YourWrapperClass {
  YourWrapperClass({this.filterOption = const [], this.filter="", this.isChecked = false});
  List<dynamic> filterOption;
  dynamic filter;
  bool isChecked;
}
List<YourWrapperClass> list = [];
var filters =
    await json.decode(data)["getProductsByStore"]["aggregations"];
    for(int i = 0; i < filters.length; i++){
      list.add(YourWrapperClass(filterOption:filters[i]["options"], filter:filters[i]["label"], isChecked=false));
      _filterOptions.add(filters[i]["options"]);

    }