Pular para o conteúdo principal

leaf_call_must_not_return_handle

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

FFI leaf call can't return a '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 tipo de retorno Handle.

O analisador também gera este diagnóstico quando o valor do argumento isLeaf em uma anotação Native é true e o argumento de tipo da anotação é um tipo de função cujo tipo de retorno é Handle.

Em todos esses casos, chamadas leaf só são suportadas para os tipos bool, int, float, double e, como tipo de retorno, void.

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 retorna um Handle, mas o argumento isLeaf é true:

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

Correções comuns

#

Se a função retorna um handle, então remova o argumento isLeaf:

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

Se a função retorna um dos tipos suportados, então corrija a informação de tipo:

dart
import 'dart:ffi';
​
void f(Pointer<NativeFunction<Int32 Function()>> p) {
  p.asFunction<int Function()>(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ê.