了解带有最终变量的飞镖/长笛构造器



此代码片段

class SomeWidget extends StatelessWidget {
final String aString;
SomeWidget(this.aString);

编译时没有错误或警告。然而,这个代码片段

class SomeWidget extends StatelessWidget {
final String aString;
SomeWidget(String inputString) {
this.aString=inputString;
}

给出了一个错误消息,即所有最终变量都必须初始化,而aString不是,以及aString如何不能用作setter,因为它是最终变量。删除final关键字将消除错误消息。

我不清楚这里发生了什么。我看到了这个和这个SO项目,但老实说,我仍在努力理解。我认为,对我来说,这个问题源于我是如何被教导我的两个代码片段在功能上是相同的。

当您将一个变量声明为final时,这意味着该变量的状态\值在该小部件的生命周期内不会更改。

因此,当您申报时:

final String aString;

你告诉框架,aString的值不会改变,因为它是最终的。然而,当您使用setter时,您正试图做与您刚才向Flutter承诺的完全相反的事情,并且您正试图更改应该是final的内容,也就是不可更改的内容。

最新更新