leaf_call_must_not_return_handle
FFI のリーフ呼び出しでは 'Handle' を返すことはできません。
説明
#Pointer.asFunction または DynamicLibrary.lookupFunction のいずれかの呼び出しで isLeaf 引数の値が true で、返される関数が Handle 型の戻り値型を持つ場合に、アナライザーはこの診断を生成します。
また、Native アノテーションの isLeaf 引数の値が true で、アノテーションの型引数が Handle を戻り値型とする関数型である場合にも、アナライザーはこの診断を生成します。
これらのすべてのケースにおいて、リーフ呼び出しは bool、int、float、double、および戻り値型としての void の型のみでサポートされています。
FFI の詳細については、dart:ffi を使用した C の相互運用 を参照してください。
例
#次のコードは、関数 p が Handle を返しますが、isLeaf 引数が true であるため、この診断を生成します。
dart
import 'dart:ffi';
void f(Pointer<NativeFunction<Handle Function()>> p) {
p.asFunction<Object Function()>(isLeaf: true);
}一般的な修正
#関数がハンドルを返す場合は、isLeaf 引数を削除してください。
dart
import 'dart:ffi';
void f(Pointer<NativeFunction<Handle Function()>> p) {
p.asFunction<Object Function()>();
}関数がサポートされている型のいずれかを返す場合は、型情報を修正してください。
dart
import 'dart:ffi';
void f(Pointer<NativeFunction<Int32 Function()>> p) {
p.asFunction<int Function()>(isLeaf: true);
}