我有一个无状态的小部件,在编写代码时,我在无状态的小部件中使用了非最终字段,并且ide不断警告我all the fields in stateless widget should be final
但是我不明白为什么在无状态小部件中具有非最终字段会成为问题。
我认为拥有非最终字段应该很好,因为可能会有一个我们以后不想修改的字段,但是该字段只能在构造函数中初始化,因此您需要使用non -最终字段
示例:
class Temp extends StatelessWidget {
final int a;
final int b;
int c;
temp({this.a, this.b}) {
this.c = this.a + this.b;
}
@override
Widget build(BuildContext context) {}
}
在上面的小部件中,即使将来没有计划更改c
的变量,我也无法将c
声明为final,因为它是在构造函数中初始化的。
如果在无状态小部件中包含非最终字段不是一个好主意,那么如何处理上述情况。
注:由于初始化可能涉及函数或循环,因此无法使用Constructor() : [initialization] {}
StatelessWidget类,不需要可变状态的小部件,因此该类被标记为@ immutable,Dart语言会最好地解决您的错误,因此“ final”关键字只会向您发出警告,但不会停止编译,如果您确定代码将被初始化一次并且不会在运行时再次更改,则可以正常使用不带final关键字的代码。
这是在Dart语言中使用2个关键字(final,const)定义常量的主要原因
final和const均阻止重新分配变量。
const
值必须在编译时已知,const birth =“ 2020/02/09”。初始化后无法更改final
值必须在运行时已知,最终生成= getBirthFromDB()。初始化后无法更改