implicit_super_initializer_missing_arguments 진단: super 초기화에 필요한 인자를 넘기지 않았어요

implicit_super_initializer_missing_arguments 진단: super 초기화에 필요한 인자를 넘기지 않았어요

하위 클래스의 생성자가 상위 클래스의 **이름 없는 생성자(unnamed constructor)**를 암묵적으로 호출하는데, 그 생성자에 필수(required) 매개변수가 있고 그에 맞는 super 매개변수가 없다면 Dart 분석기가 이 진단을 내보내요. 상위 생성자가 값을 꼭 받아야 하는데 그 값을 넘겨줄 방법이 없으니, 컴파일 타임에 알려주는 거예요.

출처: implicit_super_initializer_missing_arguments

본문

설명

생성자가 상위 클래스의 이름 없는 생성자를 암묵적으로 호출하는 상황에서, 상위 생성자에 필수 매개변수가 있는데 그에 대응하는 super 매개변수가 없으면 이 진단이 만들어져요.

예시

다음 코드는 클래스 B의 이름 없는 생성자가 클래스 A의 이름 없는 생성자를 암묵적으로 호출하는데, A의 생성자에 x라는 필수 위치 매개변수(required positional parameter)가 있어서 이 진단을 만들어요.

class A {
  A(int x);
}

class B extends A {
  B();
}

다음 코드도 마찬가지로 B의 이름 없는 생성자가 A의 이름 없는 생성자를 암묵적으로 호출하는데, 이번에는 A의 생성자에 x라는 필수 이름 매개변수(required named parameter)가 있어서 이 진단을 만들어요.

class A {
  A({required int x});
}

class B extends A {
  B();
}

흔한 해결 방법

하위 클래스의 생성자에 매개변수를 추가할 수 있다면, 상위 생성자의 필수 매개변수에 대응하는 super 매개변수를 추가해요. 새 매개변수는 필수로 만들 수도 있고,

class A {
  A({required int x});
}

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

선택(optional)으로 만들 수도 있어요.

class A {
  A({required int x});
}

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

하위 클래스의 생성자에 매개변수를 추가할 수 없다면, 필요한 인자를 넣은 명시적인 super 생성자 호출을 사용해요.

class A {
  A(int x);
}

class B extends A {
  B() : super(0);
}

더 알아보기