지연(deferred) 라이브러리의 상수로 const 변수를 초기화할 수 없어요

지연(deferred) 라이브러리의 상수로 const 변수를 초기화할 수 없어요

const 변수를 선언할 때, 그 값은 컴파일 시점에 확정돼야 해요. 그런데 지연(deferred) import로 가져온 라이브러리의 const 변수는 컴파일 시점에 아직 준비되어 있지 않아요. 그래서 이런 상황에서 Dart 분석기가 경고를 보내주는 거예요. 어떻게 고치는 게 자연스러운지 설명해 드릴게요.

출처: const_initialized_with_non_constant_value_from_deferred_library

본문

Description

Dart 분석기는 const 변수를 deferred import로 가져온 라이브러리의 const 변수로 초기화할 때 이 진단을 내요. 상수는 컴파일 시점에 평가되기 때문이죠. 그런데 deferred 라이브러리의 값은 컴파일 시점에는 아직 사용할 수 없어요.

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

Example

pi라는 변수를 dart:math 라이브러리의 상수 math.pi로 초기화하고 있는데, dart:math를 deferred 라이브러리로 import 했기 때문에 이 진단이 발생해요.

import 'dart:math' deferred as math;

const pi = math.pi;

Common fixes

import 한 라이브러리에서 상수 값을 가져와야 한다면, deferred 키워드를 빼면 돼요.

import 'dart:math' as math;

const pi = math.pi;

만약 import 한 상수를 굳이 참조할 필요가 없다면, 그 참조를 제거해 버려도 돼요.

const pi = 3.14;

더 알아보기