create<T extends Union> 静态方法

  1. @Since('3.4')
T create<T extends Union>(
  1. [TypedData typedData,
  2. int offset]
)

typedData 中创建一个字节的关联视图。

创建的关联子类的实例将依赖于 TypedData.offsetInBytes 加上 offset 乘以 TypedData.elementSizeInBytes 的字节。也就是说,由子类声明的外部实例变量的获取器和设置器,将从 TypedData.buffer 的字节中读取和写入它们的值,从 TypedData.offsetInBytes 加上 offset 乘以 TypedData.elementSizeInBytes 开始。typedDataTypedData.lengthInBytes 必须 足够包含关联子类的 sizeOf。不重要的是 typedData 是一个 Uint8List、一个 Float64List 或任何其他 TypedData,它只通过其 TypedData.bufferTypedData.offsetInBytesTypedData.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]);