import_deferred_library_with_load_function 진단: 지연 로딩하는 라이브러리가 loadLibrary 함수를 숨겨요
import_deferred_library_with_load_function 진단: 지연 로딩하는 라이브러리가 loadLibrary 함수를 숨겨요
loadLibrary라는 최상위 함수를 선언한 라이브러리를 지연(deferred) import로 가져오면 Dart 분석기가 이 진단을 내보내요. 지연 import는 loadLibrary라는 암묵적 함수를 만들어내는데, 이 함수가 그 라이브러리 안에서 직접 선언한 loadLibrary를 가려버리기 때문이에요.
본문
설명
loadLibrary라는 이름의 함수를 선언한 라이브러리를 지연 import로 가져오면 이 진단이 만들어져요. 지연 import는 loadLibrary라는 암묵적 함수를 도입하고, 이 함수는 지연 라이브러리의 내용을 불러오는 데 쓰여요. 그런데 이 암묵적 함수가 지연 라이브러리 안의 명시적 선언을 가려버려요. 자세한 내용은 지연 로딩을 확인해 보세요.
예시
a.dart 파일에 loadLibrary라는 함수가 정의되어 있다고 할게요.
void loadLibrary(Library library) {}
class Library {}
다음 코드는 a.loadLibrary의 암묵적 선언이 a.dart 안의 loadLibrary 명시적 선언을 가리기 때문에 이 진단을 만들어요.
import 'a.dart' deferred as a;
void f() {
a.Library();
}
흔한 해결 방법
가져오는 라이브러리가 꼭 지연일 필요가 없다면, deferred 키워드를 제거해요.
import 'a.dart' as a;
void f() {
a.Library();
}
가져오는 라이브러리가 지연이어야 하고 함수를 계속 참조해야 한다면, 그 라이브러리 안에서 함수 이름을 바꿔요.
void populateLibrary(Library library) {}
class Library {}
가져오는 라이브러리가 지연이어야 하지만 함수를 참조할 필요가 없다면, hide 절을 추가해요.
import 'a.dart' deferred as a hide loadLibrary;
void f() {
a.Library();
}