invalid_super_formal_parameter_location 진단: super 파라미터는 리다이렉팅이 아닌 generative 생성자에서만 쓸 수 있어요

invalid_super_formal_parameter_location 진단: super 파라미터는 리다이렉팅이 아닌 generative 생성자에서만 쓸 수 있어요

Dart 분석기가 내보내는 진단에는 이름이 있어요. invalid_super_formal_parameter_locationsuper 파라미터가 리다이렉팅이 아닌 generative 생성자(non-redirecting generative constructor) 밖에서 사용될 때 분석기가 알려주는 진단이에요. super 파라미터를 쓸 수 있는 자리는 정해져 있답니다.

출처: invalid_super_formal_parameter_location

본문

설명

분석기는 super 파라미터가 리다이렉팅이 아닌 generative 생성자 외의 다른 곳에서 사용될 때 이 진단을 만들어요.

예시

다음 코드는 super 파라미터 x가 리다이렉팅 generative 생성자에 있기 때문에 이 진단이 나와요.

class A {
  A(int x);
}

class B extends A {
  B.b(super.x) : this._();
  B._() : super(0);
}

다음 코드는 super 파라미터 x가 generative 생성자가 아닌 곳에 있기 때문에 이 진단이 나와요.

class A {
  A(int x);
}

class C extends A {
  factory C.c(super.x) => C._();
  C._() : super(0);
}

다음 코드는 super 파라미터 x가 메서드에 있기 때문에 이 진단이 나와요.

class A {
  A(int x);
}

class D extends A {
  D() : super(0);

  void m(super.x) {}
}

흔한 해결 방법

super 파라미터를 담고 있는 함수를 리다이렉팅이 아닌 generative 생성자로 바꿀 수 있다면 그렇게 해요.

class A {
  A(int x);
}

class B extends A {
  B.b(super.x);
}

만약 그 함수를 리다이렉팅이 아닌 generative 생성자로 바꿀 수 없다면, super를 제거해요.

class A {
  A(int x);
}

class D extends A {
  D() : super(0);

  void m(int x) {}
}

더 알아보기