extension_declares_instance_field 진단: 확장에서 인스턴스 필드를 선언할 수 없어요

extension_declares_instance_field 진단: 확장에서 인스턴스 필드를 선언할 수 없어요

Dart 분석기가 내보내는 진단에는 이름이 있어요. extension_declares_instance_field확장(extension) 안에서 인스턴스 필드(instance field)를 선언하려 할 때 분석기가 알려주는 컴파일 타임 진단이에요. 확장은 상태(state)가 아니라 동작(behavior)만 추가할 수 있기 때문이에요.

출처: extension_declares_instance_field

본문

설명

분석기는 확장 안에서 인스턴스 필드 선언을 발견하면 이 진단을 내보내요. 확장은 상태가 아니라 동작만 추가할 수 있기 때문에 인스턴스 필드를 정의하는 건 유효하지 않아요.

예시

다음 코드는 s가 인스턴스 필드이기 때문에 이 진단이 나와요.

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

흔한 해결 방법

필드에 저장하지 않고 값을 계산할 수 있다면, getter나 메서드를 사용해 봐요.

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

값을 저장해야 하지만 모든 인스턴스에서 값이 같다면, 정적(static) 필드를 사용해 봐요.

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

각 인스턴스가 자신만의 값을 저장해야 한다면, 정적 Expando로 뒷받침되는 getter와 setter 쌍을 사용해 봐요.

extension E on String {
  static final _s = Expando<String>();
  String get s => _s[this] ?? '';
  set s(String value) => _s[this] = value;
}

더 알아보기