native_function_missing_type 진단: 함수의 native 타입을 추론할 수 없어요

native_function_missing_type 진단: 함수의 native 타입을 추론할 수 없어요

@Native 어노테이션이 붙은 함수의 native 타입을 추론할 수 없을 때 Dart 분석기가 알려주는 native_function_missing_type 진단에 대한 설명이에요. 함수의 Dart 타입만으로는 native 함수 타입을 하나로 정할 수 없어서 어노테이션에 타입을 명시해야 해요.

출처: native_function_missing_type

본문

설명

@Native 어노테이션이 붙은 함수가 native 함수 타입을 추론하기 위해 어노테이션에 타입 힌트를 요구할 때 분석기가 이 진단을 만들어요.

intdouble 같은 Dart 타입은 여러 가지 native 표현을 가질 수 있어요. 함수에 대한 올바른 바인딩과 호출 명령을 생성하려면 native 타입이 컴파일 타임에 알려져 있어야 하므로, 명시적인 타입을 꼭 지정해줘야 해요.

FFI에 대해 더 자세히 알고 싶다면 dart:ffi를 사용한 C interop 문서를 참고해요.

예시

다음 코드는 함수 f()의 반환 타입이 int인데 Native 어노테이션에 명시적인 타입 파라미터가 없어서 이 진단을 만들어요.

import 'dart:ffi';

@Native()
external int f();

흔한 해결 방법

그에 맞는 타입을 어노테이션에 추가해요. 예를 들어 f()가 C에서 int32_t를 반환하도록 선언되었다면, Dart 함수는 다음과 같이 선언하면 돼요.

import 'dart:ffi';

@Native<Int32 Function()>()
external int f();

더 알아보기