const_deferred_class 진단: deferred 클래스는 const로 만들 수 없어요

const_deferred_class 진단: deferred 클래스는 const로 만들 수 없어요

const_deferred_class 진단은 deferred import로 불러온 라이브러리의 클래스를 써서 const 객체를 만들 때 Dart 분석기가 알려주는 컴파일 타임 진단이에요. 상수는 컴파일 타임에 평가되는데, deferred 라이브러리의 클래스는 컴파일 타임에는 존재하지 않기 때문이에요.

출처: const_deferred_class

본문

설명

분석기는 deferred import로 불러온 라이브러리의 클래스로 const 객체를 만들려고 할 때 이 진단을 만들어요. 상수는 컴파일 타임에 평가되지만, deferred 라이브러리의 클래스는 컴파일 타임에 사용할 수 없어요. 자세한 내용은 Lazily loading a library를 참고해요.

예시

다음 코드는 deferred 라이브러리의 클래스로 const 인스턴스를 만들려고 하기 때문에 이 진단이 나와요.

import 'dart:convert' deferred as convert;

const json2 = convert.JsonCodec();

흔한 해결 방법

객체가 상수일 필요가 없다면, 코드를 바꿔 상수가 아닌 인스턴스를 만들게 해요.

import 'dart:convert' deferred as convert;

final json2 = convert.JsonCodec();

객체가 반드시 상수여야 한다면, import 지시문에서 deferred를 제거해요.

import 'dart:convert' as convert;

const json2 = convert.JsonCodec();

더 알아보기