extension_declares_instance_field
擴充套件不能宣告例項欄位。
描述
#當在擴充套件中發現例項欄位宣告時,分析器會生成此診斷資訊。定義例項欄位無效,因為擴充套件只能新增行為,而不能新增狀態。
示例
#以下程式碼會產生此診斷資訊,因為 s 是一個例項欄位
dart
extension E on String {
String s;
}常見修復方法
#如果值無需儲存在欄位中即可計算,則嘗試使用 getter 或方法
dart
extension E on String {
String get s => '';
void s(String value) => print(s);
}如果值必須儲存,但對於每個例項都相同,則嘗試使用靜態欄位
dart
extension E on String {
static String s = '';
}如果每個例項需要儲存自己的值,則嘗試使用由靜態 Expando 支援的 getter 和 setter 對
dart
extension E on SomeType {
static final _s = Expando<String>();
String get s => _s[this] ?? '';
set s(String value) => _s[this] = value;
}