Skip to main content

leaf_call_must_not_take_handle

FFI leaf call can't take arguments of type '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 parameter of type Handle.

For more information about FFI, see C interop using dart:ffi.

Example

#

The following code produces this diagnostic because the function p has a parameter of type Handle, but the isLeaf argument is true:

dart
import 'dart:ffi';

void f(Pointer<NativeFunction<Void Function(Handle)>> p) {
  p.asFunction<void Function(Object)>(isLeaf: true);
}

Common fixes

#

If the function has at least one parameter of type Handle, then remove the isLeaf argument:

dart
import 'dart:ffi';

void f(Pointer<NativeFunction<Void Function(Handle)>> p) {
  p.asFunction<void Function(Object)>();
}

If none of the function's parameters are Handles, then correct the type information:

dart
import 'dart:ffi';

void f(Pointer<NativeFunction<Void Function(Int8)>> p) {
  p.asFunction<void Function(int)>(isLeaf: true);
}