-1

我一直在尝试多种方法来为我的 Flutter 项目中列表中isChecked: false的每个列表添加属性。_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},{... },{...}...]]

4

2 回答 2

2

使用您的数据和 bool isChecked 创建模型类

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;
于 2021-09-08T05:50:08.880 回答
0

只需添加这些行。

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

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

并在您需要访问时使用此包装类对象_filterOptions

但是,我更愿意推荐在列表元素上使用 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"]);

    }
于 2021-09-08T05:58:18.787 回答