leaf_call_must_not_take_handle
FFI leaf 呼び出しでは、'Handle' 型の引数を受け取ることはできません。
説明
#isLeaf 引数が true で、返される関数が Handle 型のパラメータを持つ場合、アナライザーはこの診断を生成します。これは、Pointer.asFunction または DynamicLibrary.lookupFunction の呼び出しで発生します。
FFI の詳細については、dart:ffi を使用した C の相互運用 を参照してください。
例
#以下のコードは、関数 p が Handle 型のパラメータを持ち、isLeaf 引数が true であるため、この診断を生成します。
dart
import 'dart:ffi';
void f(Pointer<NativeFunction<Void Function(Handle)>> p) {
p.asFunction<void Function(Object)>(isLeaf: true);
}一般的な修正
#関数が少なくとも 1 つの Handle 型のパラメータを持つ場合は、isLeaf 引数を削除してください。
dart
import 'dart:ffi';
void f(Pointer<NativeFunction<Void Function(Handle)>> p) {
p.asFunction<void Function(Object)>();
}関数のパラメータが Handle でない場合は、型情報を修正してください。
dart
import 'dart:ffi';
void f(Pointer<NativeFunction<Void Function(Int8)>> p) {
p.asFunction<void Function(int)>(isLeaf: true);
}