变量独立于setState



假设我的代码中有一个Map和某个地方,我想保存它的当前状态。我将Map Two设置为Map One,并继续更改Map One的值,希望保持Map Two的值不变以供参考。如果我在更改Map One后调用setState((({}(,它似乎也会更新Map Two的所有值。这不是我想要的。我想设置Map Two,直到我想再次保存Map One的状态才更新。很难在我的代码中演示这个问题而不丢弃整个东西,所以我将尝试在下面说明我所说的内容。忽略这段代码实际上不会运行,这就是我们的想法。Map Two的值将在小部件中使用,但为了示例起见,该值只是打印出来的。这段代码理论上会打印foo。我想让它开始打印。在我看来,应该有一个类似const或final的东西,我只是缺少了它,它设置了一个变量,而不是使其相对。

Map mapOne = {
'start' : 'start',
'end' : 'end'
};
late Map mapTwo;
main() {
mapTwo = mapOne;
mapOne = {
'start' : 'foo',
'end' : 'foo'
};

setState(() {});

print(mapTwo['start']);
}

当您将映射一分配给映射二时,基本上将映射一和映射二设置为引用同一对象。因此,为了实现你想要的,你可以这样做:

mapTwo = Map.from(mapOne);

以下是要验证的示例:

void main() async {
final a = {'a': 'b'};
final b = Map.from(a);
b['a'] = 'c';
print(a);
print(b);
}

我在这里找到了答案。问题是可变变量和不可变变量之间的区别。对我来说,解决方案是将我需要的值存储在字符串中,而不是映射中,因为映射是可变的,而字符串不是。我前面提到的帖子有更多的细节。

最新更新