Pular para o conteúdo principal

address_receiver

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

The receiver of '.address' must be a concrete 'TypedData', a concrete 'TypedData' '[]', an 'Array', an 'Array' '[]', a Struct field, or a Union field.

Descrição

#

O analisador emite este diagnóstico quando o getter .address é usado em um receptor cujo tipo estático não é um dos tipos FFI permitidos. O getter .address é usado para obter um Pointer para a memória subjacente de uma estrutura de dados FFI.

O receptor de .address deve ser um dos seguintes:

  • Uma instância concreta de TypedData (por exemplo, Uint8List).
  • Um elemento de uma instância concreta de TypedData acessado via [].
  • Uma instância de Array<T> (de dart:ffi).
  • Um elemento de uma instância de Array<T> acessado via [].
  • Um campo de uma subclasse de Struct ou Union, se o tipo desse campo for Array<T>, um Struct aninhado ou uma Union aninhada.
  • Uma instância de Struct ou Union.

Exemplo

#

O código a seguir produz este diagnóstico para diversos receptores incorretos:

dart
import 'dart:ffi';
​
final class MyStruct extends Struct {
  @Uint8()
  external int x;
​
  @Uint8()
  external int y;
}
​
@Native<Void Function(Pointer)>(isLeaf: true)
external void nativeLeafCall(Pointer ptr);
​
void main() {
  final struct = Struct.create<MyStruct>();
  final y = struct.y;
  // Incorrect: The receiver is not a struct field, but some integer.
  nativeLeafCall(y.address);
}

Correções comuns

#

Garanta que o receptor do getter .address seja um dos tipos permitidos. O getter .address serve para obter um Pointer para a memória de instâncias de TypedData, Array, Struct ou Union, ou de certos campos/elementos delas.

dart
import 'dart:ffi';
​
@Native<Void Function(Pointer)>(isLeaf: true)
external void nativeLeafCall(Pointer ptr);
​
final class MyStruct extends Struct {
  @Uint8()
  external int x;
​
  @Uint8()
  external int y;
}
​
void main() {
  final struct = Struct.create<MyStruct>();
  // Correct: The receiver is a struct field.
  nativeLeafCall(struct.y.address);
}

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