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

问题描述 投票:0回答:1

我有一个无状态的小部件,在编写代码时,我在无状态的小部件中使用了非最终字段,并且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] {}

flutter widget final stateless
1个回答
0
投票

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

这是在Dart语言中使用2个关键字(final,const)定义常量的主要原因

final和const均阻止重新分配变量。

const

值必须在编译时已知,const birth =“ 2020/02/09”。初始化后无法更改

final

值必须在运行时已知,最终生成= getBirthFromDB()。初始化后无法更改
© www.soinside.com 2019 - 2024. All rights reserved.