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