address_position 진단: '.address' 표현식은 leaf 네이티브 external 호출의 인자로만 쓸 수 있어요
address_position 진단: '.address' 표현식은 leaf 네이티브 external 호출의 인자로만 쓸 수 있어요
분석기가 내보내는 진단에는 이름이 있어요. address_position은 .address getter를 네이티브 external 호출의 인자가 아닌 다른 문맥에서 사용했을 때 Dart 분석기가 알려주는 컴파일 타임 진단이에요. .address 표현식은 leaf 호출(isLeaf: true)로 표시된 네이티브 external 호출의 인자로만 사용할 수 있어요.
출처: address_position
본문
설명
분석기는 .address getter가 isLeaf: true로 표시된 네이티브 external 호출의 인자로 사용되는 문맥이 아닌 곳에서 쓰였을 때 이 진단을 만들어요.
예시
다음 코드는 .address를 잘못 사용했기 때문에 이 진단을 만들어요.
import 'dart:ffi';
import 'dart:typed_data';
@Native<Void Function(Pointer<Uint8>)>()
external void nonLeafCall(Pointer<Uint8> ptr);
void main() {
final data = Uint8List(10);
// Incorrect: Using '.address' as an argument to a non-leaf call.
nonLeafCall(data.address);
}
흔한 해결 방법
.address 표현식이 @Native(...)로 애너테이션되고 isLeaf: true가 설정된 네이티브 external 호출의 인자로 직접 사용되도록 해요.
import 'dart:ffi';
import 'dart:typed_data';
@Native<Void Function(Pointer<Uint8>)>(isLeaf: true)
external void leafCall(Pointer<Uint8> ptr);
void main() {
final data = Uint8List(10);
// Correct: Using .address directly as an argument to a leaf call.
leafCall(data.address);
}