跳到主要內容

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