ffi_ native_ only_ classes_ extending_ nativefieldwrapperclass1_ can_ be_ pointer
Detalhes sobre o diagnóstico 'ffi_native_only_classes_extending_nativefieldwrapperclass1_can_be_pointer' produzido pelo analisador do Dart.
Only classes extending NativeFieldWrapperClass1 can be passed as Pointer.
Descrição
#
O analisador produz este diagnóstico quando uma função ou método anotado com
@Native tem, na sua assinatura FFI, um parâmetro que é um Pointer, mas o
tipo correspondente do parâmetro Dart é uma instância de classe que não estende
NativeFieldWrapperClass1 (ou não é um Pointer ou TypedData).
Exemplo
#
O código a seguir produz este diagnóstico porque MyService não
estende NativeFieldWrapperClass1, mas a assinatura @Native
do método
process indica que o receptor deve ser passado como um Pointer<Void>:
import 'dart:ffi';
// MyService does not extend NativeFieldWrapperClass1
class MyService {
@Native<Void Function(Pointer<Void>, Int8)>(symbol: 'MyService_process')
external void process(int data);
}
Correções comuns
#-
Se a classe Dart deve encapsular um objeto nativo: Faça a classe Dart estender
NativeFieldWrapperClass1. Esta é a abordagem correta se a instância da classe Dart tiver um objeto nativo correspondente cujo ponteiro deve ser passado.dartimport 'dart:ffi'; class MyService extends NativeFieldWrapperClass1 { @Native<Void Function(Pointer<Void>, Int8)>(symbol: 'MyService_process') external void process(int data); } -
Se você pretende passar um handle opaco para o objeto Dart: Altere a assinatura FFI na anotação
@Nativepara usarHandleem vez dePointerno parâmetro. Isso permite passar uma referência ao próprio objeto Dart, com a qual o código nativo pode interagir usando a API C do Dart.dartimport 'dart:ffi'; class MyService { @Native<Void Function(Handle, Int8)>(symbol: 'MyService_process') external void process(int data); }
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ê.