我有一个名为_device的原始地图,我将这个地图存储在一个名为'before'的变量中,然后我将这些最后的地图克隆到一个名为'after'的地图。每当我更新'after'值时,'before'和'_device'中的值也会更新。我的代码有什么问题?我已经复制了我的代码在dartPad和工作良好。我在主频道1.26.0-13.pre123下。
Map<String, dynamic> before = {};
Map<String, dynamic> after = {};
...
before = _device; // _device variable contains Map<String, dynamic>
after = {...before};
...
if (_storedValue == null) after[_field]['status'] = 'SI';
if (_storedValue == 'SI') after[_field]['status'] = 'NO';
if (_storedValue == 'NO') after[_field]['status'] = '(!)';
if (_storedValue == '(!)') after[_field]['status'] = null;
感谢您的支持。
您面临的问题是由于Dart处理对象分配和复制的方式。
在您的代码中,当您分配before = _device
时,您并没有创建_device
的新副本。相反,之前和_device
现在都在内存中引用相同的底层对象。因此,对其中一个所做的任何更改都会影响到另一个。
您可以使用Map<String, dynamic> Map.from(Map<dynamic, dynamic> other)
复制原来的Map
。
Map<String, dynamic> before = {};
Map<String, dynamic> after = {};
before = Map.from(_device);
after = Map.from(before);
if (_storedValue == null) after[_field]['status'] = 'SI';
if (_storedValue == 'SI') after[_field]['status'] = 'NO';
if (_storedValue == 'NO') after[_field]['status'] = '(!)';
if (_storedValue == '(!)') after[_field]['status'] = null;
试试这个:
Map<String, dynamic> before = {};
Map<String, dynamic> after = {};
//...
before.addAll(_device); // _device variable contains Map<String, dynamic>
after.addAll(before);