Pular para o conteúdo principal

leaf_call_must_not_take_handle

Detalhes sobre o diagnóstico 'leaf_call_must_not_take_handle' produzido pelo analisador do Dart.

FFI leaf call can't take arguments of type 'Handle'.

Descrição

#

O analisador gera este diagnóstico quando o valor do argumento isLeaf em uma invocação de Pointer.asFunction ou de DynamicLibrary.lookupFunction é true e a função que seria retornada teria um parâmetro do tipo Handle.

Para mais informações sobre FFI, consulte interoperabilidade com C usando dart:ffi.

Exemplo

#

O código a seguir gera este diagnóstico porque a função p tem um parâmetro do tipo Handle, mas o argumento isLeaf é true:

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

Correções comuns

#

Se a função tem pelo menos um parâmetro do tipo Handle, então remova o argumento isLeaf:

dart
import 'dart:ffi';
​
void f(Pointer<NativeFunction<Void Function(Handle)>> p) {
  p.asFunction<void Function(Object)>();
}

Se nenhum dos parâmetros da função for Handle, então corrija a informação de tipo:

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

Encontrou essa página sem tradução ou que precisa de correção? Abra uma issue e nos ajude a manter esse site em PT-BR para ajudar pessoas como você.