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:
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:
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:
import 'dart:ffi';
void f(Pointer<NativeFunction<Int32 Function()>> p) {
p.asFunction<int Function()>(isLeaf: true);
}
Salvo indicação em contrário, a documentação neste site reflete Dart 3.13.7. Relatar um problema.
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ê.