sách gpt4 ăn đã đi

dart - 为什么在 Flutter 中列表项不保存对 Dart 中变量的引用?

In lại 作者:IT王子 更新时间:2023-10-29 07:11:40 26 4
mua khóa gpt4 giày nike

假设我有一些 bool 自动验证变量:

  bool _autoValidateEmail = false;
bool _autoValidateCompanyName = false;
bool _autoValidatePhoneNo = false;
bool _autoValidateName = false;
bool _autoValidateSurname = false;

然后我想把它们放在一个列表中。我在 initState() 中这样做:

autoValidateList.addAll([
_autoValidateEmail,
_autoValidateCompanyName,
_autoValidatePhoneNo,
_autoValidateName,
_autoValidateSurname
]);

在运行时,值会像这样发生变化,例如

setState(() {
autoValidateList[0] = false;
});

但是如果我像这样设置 TextFormField 的值 autovalidate: _autoValidateEmail, 它不会更新。但是,如果我这样设置它:autovalidate: autoValidateList[1], 它工作正常。

那么为什么列表中的引用值没有在小部件树中更新?直接设置时=> autovalidate: _autoValidateEmail,?

câu trả lời hay nhất

Dart 中的一切都是Sự vật,所有变量本质上都是对Sự vật 的引用。当你这样做时:

var myList = [variable1, variable2, variable3];

您正在创建一个 Danh sách,它引用了一堆 Sự vật。您的 Danh sách 没有对 variable1variable2 等的引用。

也就是说,你有:

variable1 ----> object1 <---- myList[0]
variable2 ----> object2 <---- myList[1]
variable3 ----> object3 <---- myList[2]

(请注意,这实际上与 Danh sách 没有任何关系。如果您这样做:

var variable2 = variable1;

你会有相同的行为:重新分配 variable2 不会改变 variable1 所指的内容。)

当你设置 myList[0] = somethingElse 时,你会得到:

variable1 ----> object1 myList[0] ----> somethingElse
variable2 ----> object2 <---- myList[1]
variable3 ----> object3 <---- myList[2]

您不能对 myList[0] 进行赋值来更改 variable1 的赋值。但是,您可以使 variable1myList[0] 引用相同的 Sự vật,您可以Thay đổi。例如:

class Wrapper {
Wrapper(this.value);
T value;
}

final variable1 = Wrapper(true);
final myList = [variable1, ...];

现在,如果您执行 myList[0].value = falsevariable1.value 也将是 SAI

关于dart - 为什么在 Flutter 中列表项不保存对 Dart 中变量的引用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56021221/

26 4 0
Chứng chỉ ICP Bắc Kinh số 000000
Hợp tác quảng cáo: 1813099741@qq.com 6ren.com
Xem sitemap của VNExpress