지연 라이브러리의 상수는 애너테이션에 사용할 수 없음

지연 라이브러리의 상수는 애너테이션에 사용할 수 없음 (invalid_annotation_constant_value_from_deferred_library)

이 문서는 Dart 분석기(analyzer)가 만들어 내는 invalid_annotation_constant_value_from_deferred_library 진단(diagnostic)에 대한 상세한 내용을 설명하는 문서예요. 간단히 말하면, 지연(deferred) import로 가져온 라이브러리의 상수를 애너테이션의 인자 목록에서 참조했을 때 분석기가 이 진단을 알려 줘요. 어디에 어떤 문제가 있는지 살펴볼게요.

출처: invalid_annotation_constant_value_from_deferred_library

본문

진단 메시지

Constant values from a deferred library can't be used in annotations.

지연(deferred) 라이브러리의 상수 값은 애너테이션에 사용할 수 없어요.

설명

분석기는 지연 라이브러리로 import한 라이브러리에 정의된 상수를 애너테이션의 인자 목록에서 참조하면 이 진단을 만들어 내요. 애너테이션은 컴파일 타임에 평가되는데, 지연 라이브러리의 값은 컴파일 타임에 사용할 수 없기 때문이에요.

더 자세한 내용은 Lazily loading a library 문서를 확인해 주세요.

예시

다음 코드는 상수 pi를 정의한 라이브러리를 지연 라이브러리로 import 하면서, 그 상수를 애너테이션의 인자 목록에서 참조하고 있기 때문에 이 진단을 만들어 내요.

import 'dart:math' deferred as math;

class C {
  const C(double d);
}

@C(math.pi)
void f() {}

일반적인 해결 방법

import한 상수를 참조해야 한다면, import에서 deferred 키워드를 제거하면 돼요.

import 'dart:math' as math;

class C {
  const C(double d);
}

@C(math.pi)
void f() {}

import는 꼭 지연으로 유지해야 하고 다른 적절한 상수가 있다면, 지연 라이브러리의 상수 대신 그 상수를 사용하면 돼요.

더 알아보기