跳到主要内容

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