packed_annotation 진단: Struct에는 'Packed' 어노테이션을 하나만 붙일 수 있어요
packed_annotation 진단: Struct에는 'Packed' 어노테이션을 하나만 붙일 수 있어요
FFI를 쓸 때 Struct를 상속한 클래스에는 @Packed 어노테이션을 하나만 붙일 수 있어요. 그런데 클래스에 @Packed가 두 개 이상 붙어 있으면, Dart 분석기가 어느 걸 따라야 할지 알 수 없으니 이 진단을 내보내요. Packed는 C 구조체의 메모리 정렬 방식을 다트 쪽에 알려주는 어노테이션인데요, 두 개가 동시에 붙으면 그 의미가 모순이 되기 때문이에요.
본문
설명
분석기는 Struct의 하위 클래스에 Packed 어노테이션이 두 개 이상 붙어 있을 때 이 진단을 만들어요.
예시
다음 코드는 클래스 C가 Struct의 하위 클래스인데 Packed 어노테이션을 두 개 달고 있어서 이 진단을 만들어요.
import 'dart:ffi';
@Packed(1)
@Packed(1)
final class C extends Struct {
external Pointer<Uint8> notEmpty;
}
흔한 해결 방법
어노테이션 중 하나만 남기고 나머지는 모두 제거해요.
import 'dart:ffi';
@Packed(1)
final class C extends Struct {
external Pointer<Uint8> notEmpty;
}