Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/dart/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Dart 我的变量会自动更新。。。当我只设定一次的时候。为什么会发生这种情况?_Dart - Fatal编程技术网

Dart 我的变量会自动更新。。。当我只设定一次的时候。为什么会发生这种情况?

Dart 我的变量会自动更新。。。当我只设定一次的时候。为什么会发生这种情况?,dart,Dart,在我的应用程序主页中,我有一些逻辑从类(CircleData)中获取一些数据,并设置一个等于它的变量。(简化示例,以便更容易解释) 我的班级: class CircleData { static List circle1 = [1]; } 在我的主页中,我有一个按钮,按下该按钮时,变量x等于CircleData中的列表,如下所示: x = CircleData.circle1; 然后我继续修改类中的circle1列表(从不同页面中的不同按钮)。我最终将其值切换为[1,2,3],因此现在它看起

在我的应用程序主页中,我有一些逻辑从类(CircleData)中获取一些数据,并设置一个等于它的变量。(简化示例,以便更容易解释)

我的班级:

class CircleData {
static List circle1 = [1];
}
在我的主页中,我有一个按钮,按下该按钮时,变量x等于CircleData中的列表,如下所示:

x = CircleData.circle1;
然后我继续修改类中的circle1列表(从不同页面中的不同按钮)。我最终将其值切换为[1,2,3],因此现在它看起来如下所示:

class CircleData {
static List circle1 = [1, 2, 3];
}
然后我回到主页,尝试打印x,而不是像预期的那样打印“[1]”,它会打印“[1,2,3]”。为什么会发生这种情况?为什么我只将一次设置为circle1的x值突然改变并与circle1一起更新?谢谢你的帮助,我很感激

另一个版本:

所以我在做一个游戏,屏幕上有一堆圆圈。该类中的列表:

class CircleData {
static List circle1 = [1];
}

我的所有脚本都存放了更改版本的循环堆栈(随着游戏的进行,您可以修改堆栈)。因此,这里的列表可能会更改为[1,4,18,3],然后更改为[1,45,4],作为每个回合后的示例。每次转弯后,我都希望有一个选项可以撤销你的最后一次转弯。我正试图以以下方式实现这一点:在轮次结束时列表被修改之前,我创建了一个新列表(类中circle1的副本),就在所有内容更改和轮次结束之前。然后,当玩家按下撤销按钮时,复制的circle1版本(我最初称之为x)成为circle1的新值,从而撤销最后一个回合。唯一的问题是,我的变量(x,在回合结束前复制的circle1版本,实际circle1更新)在回合更改时更新为我的circle1。我希望它是独立的,这样,如果玩家选择撤销,我就可以将circle1设置为它。

在@Christophermore告诉我这是一个参考,或者我做了一些研究,并找到了一种分配而不将其作为参考的方法之后。分配它而不作为参考解决了我的问题

这种类型的作业不起作用:(其中a和b是列表)

此类型有效:(其中a和b为列表)


@克里斯托弗:谢谢!你会建议我如何解决这个问题?我之前的评论可能不准确。你能简化你的代码吗?@Christophermore好的,我加了一个更深入的解释。希望能有帮助!赋值总是创建一个引用。
List a=List.from(b)
所做的是创建一个副本,然后使
a
引用副本。此外,您通常应该更喜欢
List.of
而不是
List.from
,后者执行静态类型检查,而不是运行时类型检查。(在您的情况下,这并不重要,因为您的列表使用
动态
元素类型。)
List a = b;
List a = List.from(b);