flutter - 如何保持提供者的数据状态
问题描述
我只想在按下应用按钮时更新我的数据,但提供商不允许。当我更新我的复选框值状态时,我的所有提供者数据都在更新。我怎样才能避免这种情况
https://gist.github.com/MehmetAtabey/bc7ab87dec3c42f4d46fbd8f9d9f07c9
解决方案
如果我很好地理解了您的问题,您应该向子过滤器添加过滤器的副本,而不是相同的元素。因为 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)));
推荐阅读
- java - 如何运行 Jimple 文件?
- php - PDO 和 MSSQL,如何设置 utf8 字符集?
- git - 在使用 git 将其推出之前,您是否应该始终从您所在的分支中拉出?
- jhipster - How to access application properties from controller/service with jhipster?
- python - Sum of objects' prices in Django template
- javascript - 参考文件的用户输入在 Apache 服务器上不起作用
- reactjs - 如何在 react-admin 中只覆盖一个子文件?
- css - 如何使用 flex 拥有比例列?
- angular6 - 未找到模块:错误:无法解析 selenium-webdriver 中的“http”
- pandas - 数据框键错误列不在索引中