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;
}