정의되지 않은 확장 메서드
정의되지 않은 확장 메서드
Dart 분석기가 내보내는 진단 중 하나인 undefined_extension_method를 살펴볼게요. 확장 오버라이드로 메서드를 호출하거나 정적 메서드를 참조했는데, 지정한 확장에 그 메서드가 정의되어 있지 않을 때 이 진단이 나타나요. 메서드 이름이나 확장 이름 중 어느 쪽이 틀렸는지, 아니면 메서드 자체를 정의해야 하는지에 따라 해결 방법이 달라져요.
본문
이 진단은 다음과 같은 메시지로 나타나요.
- The method '{0}' isn't defined for the extension '{1}'. (메서드 '{0}'은(는) 확장 '{1}'에 정의되어 있지 않아요.)
설명
분석기는 확장 오버라이드를 사용해 메서드를 호출했는데 그 메서드가 지정한 확장에 정의되어 있지 않을 때 이 진단을 내보내요. 또한 정적 메서드를 참조했는데 지정한 확장에 정의되어 있지 않을 때도 이 진단을 내보내요.
예시
아래 코드는 확장 E에 b라는 이름의 인스턴스 메서드가 선언되어 있지 않기 때문에 이 진단이 발생해요.
extension E on String {
String a() => 'a';
}
extension F on String {
String b() => 'b';
}
void f() {
E('c').b();
}
아래 코드는 확장 E에 a라는 이름의 정적 메서드가 선언되어 있지 않기 때문에 이 진단이 발생해요.
extension E on String {}
var x = E.a();
자주 쓰는 해결 방법
메서드의 이름이 틀렸다면, 이미 존재하는 메서드의 이름으로 바꿔요.
extension E on String {
String a() => 'a';
}
extension F on String {
String b() => 'b';
}
void f() {
E('c').a();
}
메서드의 이름은 맞는데 확장의 이름이 틀렸다면, 확장의 이름을 올바른 이름으로 바꿔요.
extension E on String {
String a() => 'a';
}
extension F on String {
String b() => 'b';
}
void f() {
F('c').b();
}
메서드와 확장의 이름이 모두 맞는데 메서드가 정의되어 있지 않다면, 메서드를 정의해요.
extension E on String {
String a() => 'a';
String b() => 'z';
}
extension F on String {
String b() => 'b';
}
void f() {
E('c').b();
}