operator [] method
Get the element at the given index. Must be implemented by subclasses to call the appropriate spine_array_*_get
Implementation
@override
Update? operator [](int index) {
if (index < 0 || index >= length) {
throw RangeError.index(index, this, 'index');
}
final buffer = SpineBindings.bindings.spine_array_update_buffer(nativePtr.cast());
if (buffer[index].address == 0) return null;
final rtti = SpineBindings.bindings.spine_update_get_rtti(buffer[index]);
final className = SpineBindings.bindings.spine_rtti_get_class_name(rtti).cast<Utf8>().toDartString();
switch (className) {
case 'Bone':
final castedPtr = SpineBindings.bindings.spine_update_cast_to_bone(buffer[index]);
return Bone.fromPointer(castedPtr);
case 'BonePose':
final castedPtr = SpineBindings.bindings.spine_update_cast_to_bone_pose(buffer[index]);
return BonePose.fromPointer(castedPtr);
case 'IkConstraint':
final castedPtr = SpineBindings.bindings.spine_update_cast_to_ik_constraint(buffer[index]);
return IkConstraint.fromPointer(castedPtr);
case 'PathConstraint':
final castedPtr = SpineBindings.bindings.spine_update_cast_to_path_constraint(buffer[index]);
return PathConstraint.fromPointer(castedPtr);
case 'PhysicsConstraint':
final castedPtr = SpineBindings.bindings.spine_update_cast_to_physics_constraint(buffer[index]);
return PhysicsConstraint.fromPointer(castedPtr);
case 'Slider':
final castedPtr = SpineBindings.bindings.spine_update_cast_to_slider(buffer[index]);
return Slider.fromPointer(castedPtr);
case 'TransformConstraint':
final castedPtr = SpineBindings.bindings.spine_update_cast_to_transform_constraint(buffer[index]);
return TransformConstraint.fromPointer(castedPtr);
default:
throw UnsupportedError('Unknown concrete type: $className for abstract class Update');
}
}