leaf_call_must_not_take_handle
FFI leaf call 不能接受 'Handle' 类型的参数。
描述
#当调用 Pointer.asFunction
或 DynamicLibrary.lookupFunction
时,如果 isLeaf
参数的值为 true
且返回的函数包含 Handle
类型的参数,分析器会产生此诊断消息。
有关 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);
}
常见修复方法
#如果函数至少有一个 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);
}