此代码片段
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
的内容,也就是不可更改的内容。