メインコンテンツにスキップ

native_field_invalid_type

'{0}' はネイティブフィールドでサポートされていない型です。ネイティブフィールドは、ポインタ、配列、数値型、および複合型のみをサポートします。

説明

#

@Native アノテーションが付与されたフィールドの型がネイティブフィールドでサポートされていない場合、アナライザーはこの診断を生成します。

ネイティブフィールドは、ポインタ、配列、数値型、および Compound のサブタイプ(つまり、構造体や共用体)をサポートします。HandleNativeFunction のような NativeType の他のサブタイプは、ネイティブフィールドとして許可されません。

ネイティブ関数は、外部フィールドではなく、外部関数と共に使用する必要があります。

ハンドルがサポートされていないのは、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;