【问题标题】:Add an another attribute to an existing List in Flutter向 Flutter 中的现有列表添加另一个属性
【发布时间】:2021-11-04 20:55:42
【问题描述】:

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

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},{...},{. ..}...]]

【问题讨论】:

  • 为什么不直接用另一个具有isChecked 参数的自定义类对象包装_filterOptions
  • 你能用代码sn-p展示实现吗?
  • 我已经在下面的答案中展示了它。

标签: list flutter nested-lists


【解决方案1】:

使用您的数据和 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;

【讨论】:

  • 我想在 _filterOptions(data) 列表中添加isChecked 属性,这是我面临的问题。你对此有什么想法吗?
  • 您可以为整个数据创建模型类,并添加一个名为 isChecked 的变量,这可能会解决您的问题
  • 我想在选项列表中添加isChecked 属性,所以每个选项列表都必须显示新添加的isChecked 属性。如何实现?
  • ohh.. 你试过为选项创建模型类吗?
  • 是的,我已经尝试过了,但它只正确给出了index 0 详细信息
【解决方案2】:

只需添加这些行。

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"]);

    }

【讨论】:

  • 我想在_filterOptions 列表中添加isChecked 属性,这是我面临的问题。你对此有什么想法吗?
猜你喜欢
  • 1970-01-01
  • 2012-12-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-15
  • 1970-01-01
相关资源
最近更新 更多