address_receiver
`.address` 的接收者必须是具体的 `TypedData`、具体的 `TypedData` 的 `[]` 访问结果、`Array`、`Array` 的 `[]` 访问结果、Struct 字段或 Union 字段。
描述
#当 `.address` getter 用于静态类型不是允许的 FFI 类型之一的接收者时,分析器会生成此诊断。`.address` getter 用于获取 FFI 数据结构底层内存的 `Pointer`。
`.address` 的接收者必须是以下类型之一
- 一个具体的 `TypedData` 实例(例如,`Uint8List`)。
- 通过 `[]` 访问的具体 `TypedData` 实例的元素。
- 一个 `Array
` 实例(来自 `dart:ffi`)。 - 通过 `[]` 访问的 `Array
` 实例的元素。 - 一个 `Struct` 或 `Union` 子类的字段,如果该字段的类型是 `Array
`、嵌套 `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);
}