상수 문맥에서의 as 표현식은 이 SDK 버전에서 지원되지 않아요
상수 문맥에서의 as 표현식은 이 SDK 버전에서 지원되지 않아요
sdk_version_as_expression_in_const_context 진단은 상수 문맥(constant context) 안에서 as 표현식을 쓰는 코드가, as를 상수 문맥에서 지원하지 않는 이전 SDK 버전에서도 돌아야 할 때 알려주는 경고예요. SDK 제약과 코드 사용 방식 중 하나를 맞춰 주면 돼요.
본문
Dart 분석기는 하한(lower bound)이 2.3.2보다 낮은 SDK 제약을 가진 코드에서, 상수 문맥 안에 as 표현식이 쓰이는 걸 발견하면 이 진단을 만들어요. 상수 문맥은 const 키워드가 생략된 것으로 간주되는 코드 영역을 말하고, 그 영역 안의 모든 것이 상수여야 해요. as 표현식을 상수 문맥에서 쓰는 건 이전 버전에서 지원되지 않았기 때문에, 이 코드는 이전 SDK 버전에서 실행할 수 없어요.
예시
먼저, 하한이 2.3.2보다 낮은 SDK 제약을 정의한 pubspec 예시를 볼게요.
environment:
sdk: '>=2.1.0 <2.4.0'
그 pubspec을 가진 패키지 안에서 아래 같은 코드가 있으면 이 진단이 발생해요.
const num n = 3;
const int i = n as int;
흔한 해결 방법
이전 SDK 버전을 지원할 필요가 없다면, 표현식을 쓸 수 있도록 SDK 제약을 올리면 돼요.
environment:
sdk: '>=2.3.2 <2.4.0'
이전 SDK 버전을 지원해야 한다면, as 표현식을 쓰지 않도록 코드를 다시 쓰거나, as 표현식이 상수 문맥에 있지 않도록 바꾸면 돼요.
num x = 3;
int y = x as int;
더 알아보기
- Dart 분석기 진단 전체 목록 살펴보기: Dart diagnostics
- 상수 문맥과 상수 표현식 자세히 보기: Dart의 const 문서