방구석 컴퓨터/플러터

library_private_types_in_public_api 에러

CCEO 2025. 1. 9. 19:56
반응형

 

# 정확한 경고 문구
Invalid use of a private type in a public API.
Try making the private type public, or making the API that uses the private type also be private.dart 
library_private_types_in_public_api

 

위의 그림에서처럼 public API가 private 타입을 사용하면 `library_private_types_in_public_api`에러가 발생하게 된다.

이것은 주로 `StatefulWidget`의 State 클래스를 private로 선언했지만, 그 타입이 public API의 일부로 사용되고 있을 때 발생한다. (바로 저 그림과 같은 상황)

 

그래서 처음에는 코드의 변경으로 해결하려고 했는데, 이게 dart의 문법과 flutter의 권장 패턴이 충돌하는 상황이었다.

 

왜냐면 flutter의 권장 패턴은 일반적으로 StatefulWidget은 public, State는 private으로 설정하는 것이 표준이기 때문이다.

이 구조는 State의 내부 구현을 외부로부터 숨기면서도 위젯의 재사용성을 보장한다.

 

그래서 사실 flutter를 개발할 때는 이 경고를 무시해도 된다.

이 경고는 Dart Analyzer가 엄격하게 타입 노출을 감지하는 것일 뿐, Flutter에서는 문제가 없는 설계이기 때문이다.

 

그래도 계속 경고가 떠있는거 자체가 거슬리기 때문에 `analysis_options.yaml` 파일을 수정해서 특정 경고를 비활성화하는 방식을 사용했다.

`analysis_options.yaml` 파일에서 특정 경고를 비활성화하려면 analyzer의 rules 또는 errors 섹션을 사용하여 해당 경고를 비활성화할 수 있다.

 

만약에 `analysis_options.yaml` 파일이 없다면 해당 파일을 프로젝트의 루트 디렉토리에 생성하고 아래의 내용을 추가하자.

analyzer:
  exclude:
    - '**/*.g.dart' # 생성된 파일 제외
  errors:
    invalid_use_of_private_type: ignore
    # 다른 경고를 무시하려면 여기에 추가 가능
    # e.g., unused_local_variable: ignore

 

참고로 제외시킨 파일들은 Dart 애플리케이션에서 자동 생성된 파일들이다.

`.g.dart` 파일은 Dart 코드 생성 도구(예: json_serializable, freezed 등)가 자동으로 생성한 파일이다.

이런 자동 생성된 파일들은 개발자가 관리할 필요가 없으므로, Dart Analyzer가 이런 파일을 검사할 필요도 없다.

반응형