Flutter提供程序列表变量在不应更改时更改

uqdfh47h  于 2023-06-30  发布在  Flutter
关注(0)|答案(1)|浏览(169)

我正在使用Flutter Provider跨不同屏幕管理状态,我遇到了一些Provider类列表变量的问题。我有一个小部件,允许用户从列表中选择/取消选择不同的选项,这将从我的提供程序类列表中添加/删除选定/未选定的索引。我试图实现一个功能,允许保存和丢弃当前选择的选项。当我第一次保存或丢弃当前选择的索引时,一切都很完美,保存的索引相应地更新/不更新,但当我试图修改这些初始选择时,每当我的当前选择的索引列表更新时,我的保存选择的索引列表都会更新,甚至在丢弃或保存之前。
我将只张贴相关的提供程序类代码的小部件代码是很多,但如果需要也将张贴。

List<int> _savedSelectedFlavorsIndices = [];
List<int> _currentSelectedFlavorsIndices = [];

void updateCurrentSelectedFlavorsIndices(int index) {
    if (_currentSelectedFlavorsIndices.contains(index)) {
      _currentSelectedFlavorsIndices.remove(index);
    } else {
      _currentSelectedFlavorsIndices.add(index);
    }
    notifyListeners();
 }
 void discardCurrentFlavors() {
    _currentSelectedFlavorsIndices = _savedSelectedFlavorsIndices;
    notifyListeners();
 }

void updateSavedIndices() {
    _savedSelectedFlavorsIndices = _currentSelectedFlavorsIndices;
}
o2gm4chl

o2gm4chl1#

问题不是来自Provider。这是dart中List的正常行为。你用相同的地址设置它们。
当你称之为:_currentSelectedFlavorsIndices = _savedSelectedFlavorsIndices,这意味着它们现在相同。
我想你想设置所有的值从savedListcurrentList

解决方案:使用List.from()

void discardCurrentFlavors() {
    _currentSelectedFlavorsIndices = List.from(_savedSelectedFlavorsIndices);
    notifyListeners();
 }

void updateSavedIndices() {
    _savedSelectedFlavorsIndices = List.from(_currentSelectedFlavorsIndices);
}

希望这能帮上忙。

相关问题