import_deferred_library_with_load_function 진단: 지연 로딩하는 라이브러리가 loadLibrary 함수를 숨겨요

import_deferred_library_with_load_function 진단: 지연 로딩하는 라이브러리가 loadLibrary 함수를 숨겨요

loadLibrary라는 최상위 함수를 선언한 라이브러리를 지연(deferred) import로 가져오면 Dart 분석기가 이 진단을 내보내요. 지연 import는 loadLibrary라는 암묵적 함수를 만들어내는데, 이 함수가 그 라이브러리 안에서 직접 선언한 loadLibrary를 가려버리기 때문이에요.

출처: import_deferred_library_with_load_function

본문

설명

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();
}

더 알아보기