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);
}