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