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

아래 코드는 함수 faddressOf에 전달하지만 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 문서를 참고해요.