create<T extends Struct> 静态方法
- @Since('3.4')
在 typedData
中创建字节的结构视图。
创建的结构子类实例将依赖于 TypedData.offsetInBytes 加上 offset
乘以 TypedData.elementSizeInBytes 的字节。也就是说,子类声明的外部实例变量的获取器和设置器将读取从 TypedData.buffer 中 typedData
的字节的值,从 TypedData.offsetInBytes 加上 offset
乘以 TypedData.elementSizeInBytes 开始。 typedData
的 TypedData.lengthInBytes 必须 足够包含结构子类的大小。重要的不是 typedData
是一个 Uint8List、一个 Float64List 或任何其他 TypedData,它只被看作是通过其 TypedData.buffer、TypedData.offsetInBytes 和 TypedData.lengthInBytes 的一个 ByteBuffer 视图。
如果省略了 typedData
,在 Dart 堆上分配一个新鲜 ByteBuffer,其字节数刚好足够创建的结构的大小,并用作存储结构字段内存。
如果提供了 offset
,则在 typedData
中的索引将偏移 offset
乘以 TypedData.elementSizeInBytes。
示例
final class Point extends Struct {
@Double()
external double x;
@Double()
external double y;
/// Creates Dart managed memory to hold a `Point` and returns the
/// `Point` view on it.
factory Point(double x, double y) {
return Struct.create()
..x = x
..y = y;
}
/// Creates a [Point] view on [typedData].
factory Point.fromTypedData(TypedData typedData) {
return Struct.create(typedData);
}
}
要从 Pointer 创建结构对象,请使用 StructPointer.ref。
实现
@Since('3.4')
external static T create<T extends Struct>([TypedData typedData, int offset]);