无状态颤振小部件中的非最终字段

rah*_*aha 5 final widget stateless flutter

我有一个无状态小部件,在编写代码时,我在无状态小部件中使用了一个非最终字段,IDE 不断警告我 all the fields in stateless widget should be final

但我不明白为什么在无状态小部件中有一个非最终字段是一个问题。

我认为拥有非 final 字段应该完全没问题,因为可能有一个我们不想稍后修改的字段,但该字段只能在构造函数内部初始化,因此您需要使用 non-final场地

例子:

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) {}
}
Run Code Online (Sandbox Code Playgroud)

在上面的小部件中,c即使我没有计划c在将来更改变量,我也无法将其设为 final,因为它是在构造函数内部初始化的。

如果在无状态小部件中使用非最终字段不是一个好主意,那么如何处理上述情况。

注意:我不能使用,Constructor() : [initialization] {}因为初始化可能涉及函数或循环

小智 1

StatelessWidget 类 不需要可变状态的小部件,因此该类被标记为 @immutable,Dart 语言会尽力修复您的错误,因此“final”关键字只会警告您,但不会停止编译,您可以如果您确定代码会初始化一次并且在运行时不会再次更改,请正常使用不带 Final 关键字的代码。

这就是 Dart 语言中定义常量需要 2 个关键字(final、const)的主要原因

Final 和 const 都可以防止变量被重新分配。

const值必须在编译时已知,constbirth = "2020/02/09"。初始化后不可更改

最终值必须在运行时已知,最终出生 = getBirthFromDB()。初始化后不可更改