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