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);
}

더 알아보기