not_initialized_non_nullable_instance_field
非空实例字段“{0}”必须被初始化。
描述
#当字段被声明并具有以下所有特征时,分析器会生成此诊断信息:
- 其类型可能不可为空
- 没有初始化表达式
- 未标记为
late
示例
#以下代码会生成此诊断信息,因为 x
在不允许为 null
的情况下被隐式初始化为 null
:
dart
class C {
int x;
}
类似地,以下代码也会生成此诊断信息,因为 x
在不允许为 null
的情况下,被其中一个构造函数隐式初始化为 null
,即使它被其他构造函数初始化了。
dart
class C {
int x;
C(this.x);
C.n();
}
常见修复方法
#如果该字段有一个对所有实例都相同的合理默认值,则添加一个初始化表达式。
dart
class C {
int x = 0;
}
如果字段的值应在创建实例时提供,则添加一个设置该字段值的构造函数或更新现有构造函数。
dart
class C {
int x;
C(this.x);
}
您也可以将字段标记为 late
,这将消除诊断信息,但如果在访问该字段之前未为其赋值,则会在运行时抛出异常。只有在您确定该字段在被引用之前总是会被赋值的情况下,才应使用此方法。
dart
class C {
late int x;
}