跳過主內容

native_field_invalid_type

'{0}' 是原生欄位不支援的型別。原生欄位僅支援指標、陣列或數字和複合型別。

描述

#

當帶有 @Native 註解的欄位具有原生欄位不支援的型別時,分析器會生成此診斷資訊。

原生欄位支援指標、陣列、數字型別以及 Compound 的子型別(即結構體或聯合體)。NativeType 的其他子型別,例如 HandleNativeFunction,不允許作為原生欄位。

原生函式應與外部函式一起使用,而不是外部欄位。

不支援 Handle,因為無法透明地將 Dart 物件載入和儲存到指標中。

有關 FFI 的更多資訊,請參閱 使用 dart:ffi 進行 C 互操作

示例

#

以下程式碼會生成此診斷資訊,因為欄位 free 使用了不支援的原生型別 NativeFunction

dart
import 'dart:ffi';

@Native<NativeFunction<Void Function()>>()
external void Function() free;

常見修復方法

#

如果您想使用 NativeFunction 欄位繫結到現有的原生函式,請改用 @Native 方法

dart
import 'dart:ffi';

@Native<Void Function(Pointer<Void>)>()
external void free(Pointer<Void> ptr);

要在 C 中繫結到儲存函式指標的欄位,請為 Dart 欄位使用指標型別

dart
import 'dart:ffi';

@Native()
external Pointer<NativeFunction<Void Function(Pointer<Void>)>> free;