leaf_ call_ must_ not_ return_ handle
Details about the 'leaf_call_must_not_return_handle' diagnostic produced by the Dart analyzer.
FFI leaf call can't return a 'Handle'.
Description
#
The analyzer produces this diagnostic when the value of the
isLeaf argument in an invocation of either
Pointer.asFunction or
DynamicLibrary.lookupFunction is
true and the function that would be returned
would have a return type of Handle.
The analyzer also produces this diagnostic when the value of
the isLeaf argument in an
Native annotation is true and the
type argument on the annotation is a function type whose
return type is Handle.
In all of these cases, leaf calls are only supported for the
types bool, int, float,
double, and, as a return type void.
For more information about FFI, see C interop using dart:ffi.
Example
#
The following code produces this diagnostic because the
function p returns a Handle, but the
isLeaf argument is true:
import 'dart:ffi';
void f(Pointer<NativeFunction<Handle Function()>> p) {
p.asFunction<Object Function()>(isLeaf: true);
}
Common fixes
#
If the function returns a handle, then remove the
isLeaf argument:
import 'dart:ffi';
void f(Pointer<NativeFunction<Handle Function()>> p) {
p.asFunction<Object Function()>();
}
If the function returns one of the supported types, then correct the type information:
import 'dart:ffi';
void f(Pointer<NativeFunction<Int32 Function()>> p) {
p.asFunction<int Function()>(isLeaf: true);
}
除非另有说明,文档之所提及适用于 Dart 3.12.2 版本报告页面问题.