首页 > 解决方案 > 理解 = 飞镖中的运算符

问题描述

在这里做什么=

List<Segment> totalSegments = flight.departureFlight.segments;

两者都做,totalSegmentsflight.departureFlight.segments指向相同的内存引用或totalSegments具有相同的数据flight.departureFlight.segments但指向不同的内存位置?
我的理解是后者应该发生,因为 dart 是按值传递而不是引用。但是,当我在该行下方添加这一行时,出现了一个非常烦人的错误:

totalSegments.addAll(flight.returnFlight.segments);

上面这行实际上修改了flight变量,而变量又以某种方式修改AsyncSnapshotStreamBuilder. 虽然,我没有在其他任何地方使用该变量,也没有修改提到的其他变量。
这一切都发生在build无状态小部件的函数内部。也许这与它有关。
我尝试为它阅读dart 文档,但要么我找不到我要找的东西,要么那里的信息根本就不见了。也读这个,但根据这个,我的用例不应该发生。

标签: flutterdarthybrid-mobile-app

解决方案


你被 Dart 通过值而不是引用传递的事实弄错了。实际上,恰恰相反:(几乎)所有内容总是通过引用传递(这通常是一件好事!)因此,这是很合乎逻辑的,因为你编辑了totalSegmentsdepartureflight.segments也被编辑了。这是一个同义词。解决您的问题的方法之一是:

List<Segment> totalSegments = List();
totalSegments.addAll(flight.departureFlight.segments.toList());

推荐阅读