Pular para o conteúdo principal

native_field_invalid_type

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

'{0}' is an unsupported type for native fields. Native fields only support pointers, arrays or numeric and compound types.

Descrição

#

O analisador emite este diagnóstico quando um campo anotado com @Native tem um tipo que não é suportado para campos nativos.

Campos nativos suportam ponteiros, arrays, tipos numéricos e subtipos de Compound (ou seja, structs ou unions). Outros subtipos de NativeType, como Handle ou NativeFunction, não são permitidos como campos nativos.

Funções nativas devem ser usadas com funções externas em vez de campos externos.

Handles não são suportados porque não há como carregar e armazenar objetos Dart em ponteiros de forma transparente.

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

Exemplo

#

O código a seguir gera este diagnóstico porque o campo free usa um tipo nativo não suportado, NativeFunction:

dart
import 'dart:ffi';
​
@Native<NativeFunction<Void Function()>>()
external void Function() free;

Correções comuns

#

Se você pretendia vincular uma função nativa existente com um campo NativeFunction, use métodos @Native no lugar:

dart
import 'dart:ffi';
​
@Native<Void Function(Pointer<Void>)>()
external void free(Pointer<Void> ptr);

Para vincular um campo que armazena um ponteiro de função em C, use um tipo de ponteiro para o campo Dart:

dart
import 'dart:ffi';
​
@Native()
external Pointer<NativeFunction<Void Function(Pointer<Void>)>> free;

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