argument_must_be_native
argument_must_be_native
Dart 애널라이저가 생성하는 argument_must_be_native 진단에 대한 설명이에요.
출처: 원문
본문
Native.addressOf에 전달하는 인자는 @Native로 주석 처리되어야 해요.
설명
애널라이저는 Native.addressOf에 전달된 인자가 Native 애너테이션으로 주석 처리되지 않았을 때 이 진단을 생성해요.
예시
아래 코드는 addressOf의 인자가 필드가 아닌 문자열이고, 문자열은 주석 처리할 수 없기 때문에 이 진단을 만들어요.
import 'dart:ffi';
@Native<Void Function()>()
external void f();
void g() {
print(Native.addressOf('f'));
}
아래 코드는 함수 f를 addressOf에 전달하지만 Native로 주석 처리되지 않았기 때문에 이 진단을 만들어요.
import 'dart:ffi';
external void f();
void g() {
print(Native.addressOf<NativeFunction<Void Function()>>(f));
}
일반적인 수정 방법
인자가 필드나 함수 중 어느 것도 아니라면 인자를 Native로 주석 처리된 필드나 함수로 바꿔요.
import 'dart:ffi';
@Native<Void Function()>()
external void f();
void g() {
print(Native.addressOf<NativeFunction<Void Function()>>(f));
}
인자가 필드나 함수라면 그 필드나 함수에 Native로 주석을 달아요.
import 'dart:ffi';
@Native<Void Function()>()
external void f();
void g() {
print(Native.addressOf<NativeFunction<Void Function()>>(f));
}
더 알아보기
FFI와 dart:ffi를 사용한 C 연동에 대한 더 자세한 내용은 관련 문서와 API 문서를 참고해요.