not_assigned_potentially_non_nullable_local_variable
不可为空的局部变量 '{0}' 必须在使用前赋值。
描述
#当局部变量被引用且具有以下所有特征时,分析器会产生此诊断信息:
示例
#以下代码会产生此诊断信息,因为 x
不能拥有 null
值,但在赋值前被引用了:
dart
String f() {
int x;
return x.toString();
}
以下代码会产生此诊断信息,因为对 x
的赋值可能不会执行,因此它可能拥有 null
值:
dart
int g(bool b) {
int x;
if (b) {
x = 1;
}
return x * 2;
}
以下代码会产生此诊断信息,因为基于确定性赋值分析,分析器无法证明 x
在未赋值的情况下不会被引用:
dart
int h(bool b) {
int x;
if (b) {
x = 1;
}
if (b) {
return x * 2;
}
return 0;
}
常见修复
#如果 null
是一个有效值,那么将变量设为可为空。
dart
String f() {
int? x;
return x!.toString();
}
如果 null
不是一个有效值,并且存在一个合理的默认值,那么添加一个初始化器。
dart
int g(bool b) {
int x = 2;
if (b) {
x = 1;
}
return x * 2;
}
否则,确保在访问该值之前,所有可能的代码路径上都已给变量赋值。
dart
int g(bool b) {
int x;
if (b) {
x = 1;
} else {
x = 2;
}
return x * 2;
}
你也可以将变量标记为 late
,这会消除诊断信息,但如果变量在访问前未赋值,则会在运行时抛出异常。这种方法只应在你确定变量总是会被赋值的情况下使用,即使分析器无法基于确定性赋值分析来证明这一点。
dart
int h(bool b) {
late int x;
if (b) {
x = 1;
}
if (b) {
return x * 2;
}
return 0;
}