首页 > 解决方案 > 如何保持提供者的数据状态

问题描述

我只想在按下应用按钮时更新我的​​数据,但提供商不允许。当我更新我的复选框值状态时,我的所有提供者数据都在更新。我怎样才能避免这种情况

滤网

https://gist.github.com/MehmetAtabey/bc7ab87dec3c42f4d46fbd8f9d9f07c9

标签: flutterdartmobileproviderstate-management

解决方案


如果我很好地理解了您的问题,您应该向子过滤器添加过滤器的副本,而不是相同的元素。因为 Dart 默认使用对象引用,所以你引用的是同一个对象。

为您创建过滤“克隆”方法:

class Filter {
  final String filterName;
  final String filterGroupName;
  int count = 0;
  bool isSelected = false;
  Filter(this.filterGroupName, this.filterName);
  
  factory Filter.clone(Filter source){
    Filter f = Filter(source.filterGroupName, source.filterName);
    f.count = source.count;
    f.isSelected = source.isSelected;
    return f;
  }
}

创建子列表数组时,使用“克隆”方法将对象添加到新列表中:

List<Filter> temp = widget.filters.where((element) => element.filterGroupName == widget.filterGroupName).toList();

widget.subFilters = List<Filter>();    
temp.forEach((el)=>widget.subFilters.add(Filter.clone(el)));

推荐阅读