address_receiver
`.address` のレシーバーは、具体的な `TypedData`、具体的な `TypedData` の `[]`、`Array`、`Array` の `[]`、Struct のフィールド、または Union のフィールドである必要があります。
説明
#静的型が許可された FFI 型のいずれでもないレシーバーで .address getter が使用されている場合、アナライザーはこの診断を生成します。.address getter は、FFI データ構造の基になるメモリへの Pointer を取得するために使用されます。
.address のレシーバーは、次のいずれかである必要があります。
- 具体的な
TypedDataインスタンス (例:Uint8List)。 []を介してアクセスされた、具体的なTypedDataインスタンスの要素。Array<T>インスタンス (dart:ffiから)。[]を介してアクセスされた、Array<T>インスタンスの要素。- フィールドの型が
Array<T>、ネストされたStruct、またはネストされたUnionである場合、StructまたはUnionサブクラスのフィールド。 StructまたはUnionインスタンス。
例
#次のコードは、さまざまな無効なレシーバーに対してこの診断を生成します。
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);
}一般的な修正
#.address getter のレシーバーが、許可された型のいずれかであることを確認してください。.address getter は、TypedData、Array、Struct、または Union インスタンス、あるいはそれらの特定のフィールド/要素のメモリへの Pointer を取得するためのものです。
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);
}