operator [] method

  1. @override
ToProperty? operator [](
  1. int index
)
override

Get the element at the given index. Must be implemented by subclasses to call the appropriate spine_array_*_get

Implementation

@override
ToProperty? operator [](int index) {
  if (index < 0 || index >= length) {
    throw RangeError.index(index, this, 'index');
  }
  final buffer = SpineBindings.bindings.spine_array_to_property_buffer(nativePtr.cast());
  if (buffer[index].address == 0) return null;
  final rtti = SpineBindings.bindings.spine_to_property_get_rtti(buffer[index]);
  final className = SpineBindings.bindings.spine_rtti_get_class_name(rtti).cast<Utf8>().toDartString();
  switch (className) {
    case 'ToRotate':
      final castedPtr = SpineBindings.bindings.spine_to_property_cast_to_to_rotate(buffer[index]);
      return ToRotate.fromPointer(castedPtr);
    case 'ToScaleX':
      final castedPtr = SpineBindings.bindings.spine_to_property_cast_to_to_scale_x(buffer[index]);
      return ToScaleX.fromPointer(castedPtr);
    case 'ToScaleY':
      final castedPtr = SpineBindings.bindings.spine_to_property_cast_to_to_scale_y(buffer[index]);
      return ToScaleY.fromPointer(castedPtr);
    case 'ToShearY':
      final castedPtr = SpineBindings.bindings.spine_to_property_cast_to_to_shear_y(buffer[index]);
      return ToShearY.fromPointer(castedPtr);
    case 'ToX':
      final castedPtr = SpineBindings.bindings.spine_to_property_cast_to_to_x(buffer[index]);
      return ToX.fromPointer(castedPtr);
    case 'ToY':
      final castedPtr = SpineBindings.bindings.spine_to_property_cast_to_to_y(buffer[index]);
      return ToY.fromPointer(castedPtr);
    default:
      throw UnsupportedError('Unknown concrete type: $className for abstract class ToProperty');
  }
}