정의되지 않은 확장 getter

정의되지 않은 확장 getter

Dart 분석기가 내보내는 진단 중 하나인 undefined_extension_getter를 살펴볼게요. 확장(extension) 오버라이드로 getter를 호출하거나 정적 getter를 참조했는데, 지정한 확장에 해당 getter가 정의되어 있지 않을 때 이 진단이 나타나요. getter 이름이나 확장 이름 중 어느 쪽이 틀렸는지 확인해 보면 좋아요.

출처: undefined_extension_getter

본문

이 진단은 다음과 같은 메시지로 나타나요.

  • The getter '{0}' isn't defined for the extension '{1}'. (getter '{0}'은(는) 확장 '{1}'에 정의되어 있지 않아요.)

설명

분석기는 확장 오버라이드를 사용해 getter를 호출했는데 그 getter가 지정한 확장에 정의되어 있지 않을 때 이 진단을 내보내요. 또한 정적 getter를 참조했는데 지정한 확장에 정의되어 있지 않을 때도 이 진단을 내보내요.

예시

아래 코드는 확장 Eb라는 이름의 인스턴스 getter가 선언되어 있지 않기 때문에 이 진단이 발생해요.

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

extension F on String {
  String get b => 'b';
}

void f() {
  E('c').b;
}

아래 코드는 확장 Ea라는 이름의 정적 getter가 선언되어 있지 않기 때문에 이 진단이 발생해요.

extension E on String {}

var x = E.a;

자주 쓰는 해결 방법

getter의 이름이 틀렸다면, 이미 존재하는 getter의 이름으로 바꿔요.

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

extension F on String {
  String get b => 'b';
}

void f() {
  E('c').a;
}

getter의 이름은 맞는데 확장의 이름이 틀렸다면, 확장의 이름을 올바른 이름으로 바꿔요.

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

extension F on String {
  String get b => 'b';
}

void f() {
  F('c').b;
}

getter와 확장의 이름이 모두 맞는데 getter가 정의되어 있지 않다면, getter를 정의해요.

extension E on String {
  String get a => 'a';
  String get b => 'z';
}

extension F on String {
  String get b => 'b';
}

void f() {
  E('c').b;
}

더 알아보기