メインコンテンツにスキップ

extension_declares_instance_field

拡張機能はインスタンスフィールドを宣言できません。

説明

#

インスタンスフィールドの宣言が拡張機能内で見つかると、アナライザーはこの診断を生成します。拡張機能は状態ではなく、動作のみを追加できるため、インスタンスフィールドを定義することはできません。

#

次のコードは、s がインスタンスフィールドであるため、この診断を生成します。

dart
extension E on String {
  String s;
}

一般的な修正

#

値をフィールドに保存せずに計算できる場合は、ゲッターまたはメソッドの使用を検討してください。

dart
extension E on String {
  String get s => '';

  void s(String value) => print(s);
}

値を保存する必要があるが、すべてのインスタンスで同じである場合は、静的フィールドの使用を検討してください。

dart
extension E on String {
  static String s = '';
}

各インスタンスが独自の値を保存する必要がある場合は、静的 Expando をバックエンドとするゲッターとセッターのペアの使用を検討してください。

dart
extension E on SomeType {
  static final _s = Expando<String>();

  String get s => _s[this] ?? '';
  set s(String value) => _s[this] = value;
}