final_not_initialized_constructor
所有 final 变量都必须被初始化,但 '{0}' 和 '{1}' 没有。
所有 final 变量都必须被初始化,但 '{0}' 没有。
所有 final 变量都必须被初始化,但 '{0}'、'{1}' 和 {2} 个其他变量没有。
描述
#当一个类定义了一个或多个没有初始值的 final 实例字段,并且至少有一个构造函数没有初始化这些字段时,分析器会产生此诊断。所有 final 实例字段在实例创建时都必须被初始化,无论是通过字段的初始值设定项还是通过构造函数。
示例
#以下代码会产生此诊断
dart
class C {
final String value;
C();
}
常见修复
#如果值应该直接传递给构造函数,则使用初始化形式参数来初始化字段 value
dart
class C {
final String value;
C(this.value);
}
如果该值应从调用者提供的值间接计算,则添加一个参数并包含一个初始化表达式
dart
class C {
final String value;
C(Object o) : value = o.toString();
}
如果字段的值不依赖于可以传递给构造函数的值,则在字段声明中为该字段添加一个初始值设定项
dart
class C {
final String value = '';
C();
}
如果字段的值不依赖于可以传递给构造函数的值,但不同的构造函数需要将其初始化为不同的值,则在初始化列表中为该字段添加一个初始值设定项
dart
class C {
final String value;
C() : value = '';
C.named() : value = 'c';
}
然而,如果该值对于所有实例都相同,则考虑使用静态字段而不是实例字段
dart
class C {
static const String value = '';
C();
}