Pular para o conteúdo principal

must_be_a_subtype

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

The type '{0}' must be a subtype of '{1}' for '{2}'.

Descrição

#

O analisador emite este diagnóstico em dois casos:

  • Em uma invocação de Pointer.fromFunction, ou de um construtor de NativeCallable, em que o argumento de tipo (explícito ou inferido) não é um supertipo do tipo da função passada como primeiro argumento do método.
  • Em uma invocação de DynamicLibrary.lookupFunction em que o primeiro argumento de tipo não é um supertipo do segundo argumento de tipo.

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 tipo da função f (String Function(int)) não é um subtipo do argumento de tipo T (Int8 Function(Int8)):

dart
import 'dart:ffi';
​
typedef T = Int8 Function(Int8);
​
double f(double i) => i;
​
void g() {
  Pointer.fromFunction<T>(f, 5.0);
}

Correções comuns

#

Se a função estiver correta, então altere o argumento de tipo para corresponder:

dart
import 'dart:ffi';
​
typedef T = Float Function(Float);
​
double f(double i) => i;
​
void g() {
  Pointer.fromFunction<T>(f, 5.0);
}

Se o argumento de tipo estiver correto, então altere a função para corresponder:

dart
import 'dart:ffi';
​
typedef T = Int8 Function(Int8);
​
int f(int i) => i;
​
void g() {
  Pointer.fromFunction<T>(f, 5);
}

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