Pular para o conteúdo principal

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>:

dart
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

#
  1. 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.

    dart
    import 'dart:ffi';
    ​
    class MyService extends NativeFieldWrapperClass1 {
      @Native<Void Function(Pointer<Void>, Int8)>(symbol: 'MyService_process')
      external void process(int data);
    }
    
  2. Se você pretende passar um handle opaco para o objeto Dart: Altere a assinatura FFI na anotação @Native para usar Handle em vez de Pointer no 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.

    dart
    import 'dart:ffi';
    ​
    class MyService {
      @Native<Void Function(Handle, Int8)>(symbol: 'MyService_process')
      external void process(int data);
    }
    

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ê.