[flutter] codegen now uses nullability info from spine-c ir-generator to make return and parameter types optional if necessary.

This commit is contained in:
Mario Zechner 2025-07-25 22:50:54 +02:00
parent 7534416489
commit 03757139cd
34 changed files with 324 additions and 263 deletions

View File

@ -3,7 +3,8 @@
"type": "module", "type": "module",
"scripts": { "scripts": {
"format": "npx -y typescript-formatter -r **/*.ts", "format": "npx -y typescript-formatter -r **/*.ts",
"generate": "npx tsx src/index.ts" "generate": "npx tsx src/index.ts",
"check": "npx biome check src && npx tsc --noEmit"
}, },
"dependencies": { "dependencies": {
"spine-c-codegen": "file:../../spine-c/codegen" "spine-c-codegen": "file:../../spine-c/codegen"

View File

@ -383,13 +383,13 @@ export class DartWriter {
private createGetter (method: CMethod, cType: CClassOrStruct, classType: 'concrete' | 'abstract' | 'interface', renamedMethod?: string): DartMember { private createGetter (method: CMethod, cType: CClassOrStruct, classType: 'concrete' | 'abstract' | 'interface', renamedMethod?: string): DartMember {
const propertyName = renamedMethod || this.extractPropertyName(method.name, cType.name); const propertyName = renamedMethod || this.extractPropertyName(method.name, cType.name);
const dartReturnType = this.toDartReturnType(method.returnType); const dartReturnType = this.toDartReturnType(method.returnType, method.returnTypeNullable);
// Interface methods have no implementation (from spec) // Interface methods have no implementation (from spec)
let implementation = ''; let implementation = '';
if (classType !== 'interface') { if (classType !== 'interface') {
implementation = `final result = SpineBindings.bindings.${method.name}(_ptr); implementation = `final result = SpineBindings.bindings.${method.name}(_ptr);
${this.generateReturnConversion(method.returnType, 'result')}`; ${this.generateReturnConversion(method.returnType, 'result', method.returnTypeNullable)}`;
} }
// Check if this is an override // Check if this is an override
@ -446,7 +446,7 @@ export class DartWriter {
private createMethod (method: CMethod, cType: CClassOrStruct, classType: 'concrete' | 'abstract' | 'interface', renamedMethod?: string): DartMember { private createMethod (method: CMethod, cType: CClassOrStruct, classType: 'concrete' | 'abstract' | 'interface', renamedMethod?: string): DartMember {
let methodName = renamedMethod || this.toDartMethodName(method.name, cType.name); let methodName = renamedMethod || this.toDartMethodName(method.name, cType.name);
const dartReturnType = this.toDartReturnType(method.returnType); const dartReturnType = this.toDartReturnType(method.returnType, method.returnTypeNullable);
// Check if this is a static method // Check if this is a static method
const isStatic = method.parameters.length === 0 || const isStatic = method.parameters.length === 0 ||
@ -479,7 +479,7 @@ export class DartWriter {
implementation = `SpineBindings.bindings.${method.name}(${args});`; implementation = `SpineBindings.bindings.${method.name}(${args});`;
} else { } else {
implementation = `final result = SpineBindings.bindings.${method.name}(${args}); implementation = `final result = SpineBindings.bindings.${method.name}(${args});
${this.generateReturnConversion(method.returnType, 'result')}`; ${this.generateReturnConversion(method.returnType, 'result', method.returnTypeNullable)}`;
} }
} }
@ -824,11 +824,13 @@ ${declaration} {`;
const cClass = this.classMap.get(cElementType); const cClass = this.classMap.get(cElementType);
if (cClass && this.isAbstract(cClass)) { if (cClass && this.isAbstract(cClass)) {
// Use RTTI to determine concrete type for abstract classes // Use RTTI to determine concrete type for abstract classes - handle null case
lines.push(` if (buffer[index].address == 0) return null;`);
const rttiCode = this.generateRttiBasedInstantiation(dartElementType, 'buffer[index]', cClass); const rttiCode = this.generateRttiBasedInstantiation(dartElementType, 'buffer[index]', cClass);
lines.push(` ${rttiCode}`); lines.push(` ${rttiCode}`);
} else { } else {
lines.push(` return ${dartElementType}.fromPointer(buffer[index]);`); // For array elements, check if the pointer is null
lines.push(` return buffer[index].address == 0 ? null : ${dartElementType}.fromPointer(buffer[index]);`);
} }
} }
@ -846,7 +848,9 @@ ${declaration} {`;
// Convert value to C type // Convert value to C type
const param = setMethod.parameters[2]; // The value parameter const param = setMethod.parameters[2]; // The value parameter
const convertedValue = this.convertDartToC('value', param); // Create a copy of the parameter with nullable flag for proper conversion
const nullableParam = { ...param, isNullable: !this.isPrimitiveArrayType(elementType) };
const convertedValue = this.convertDartToC('value', nullableParam);
lines.push(` SpineBindings.bindings.${setMethod.name}(nativePtr.cast(), index, ${convertedValue});`); lines.push(` SpineBindings.bindings.${setMethod.name}(nativePtr.cast(), index, ${convertedValue});`);
lines.push(' }'); lines.push(' }');
} }
@ -876,7 +880,7 @@ ${declaration} {`;
// Handle pointer types // Handle pointer types
if (elementType.endsWith('*')) { if (elementType.endsWith('*')) {
const baseType = elementType.slice(0, -1).trim(); const baseType = elementType.slice(0, -1).trim();
return this.toDartTypeName(`spine_${toSnakeCase(baseType)}`); return `${this.toDartTypeName(`spine_${toSnakeCase(baseType)}`)}?`;
} }
// For primitive types, return the Dart type directly // For primitive types, return the Dart type directly
@ -896,8 +900,8 @@ ${declaration} {`;
return 'bool'; return 'bool';
} }
// For object types, convert to PascalCase // For object types, convert to PascalCase and make nullable since arrays can contain null pointers
return this.toPascalCase(elementType); return `${this.toPascalCase(elementType)}?`;
} }
private isPrimitiveArrayType (elementType: string): boolean { private isPrimitiveArrayType (elementType: string): boolean {
@ -1120,19 +1124,22 @@ ${declaration} {`;
return enumValue; return enumValue;
} }
private toDartReturnType (cType: string): string { private toDartReturnType (cType: string, nullable?: boolean): string {
let baseType: string;
if (cType === 'void') return 'void'; if (cType === 'void') return 'void';
if (cType === 'char*' || cType === 'char *' || cType === 'const char*' || cType === 'const char *') return 'String'; if (cType === 'char*' || cType === 'char *' || cType === 'const char*' || cType === 'const char *') baseType = 'String';
if (cType === 'float' || cType === 'double') return 'double'; else if (cType === 'float' || cType === 'double') baseType = 'double';
if (cType === 'int' || cType === 'size_t' || cType === 'int32_t' || cType === 'uint32_t') return 'int'; else if (cType === 'int' || cType === 'size_t' || cType === 'int32_t' || cType === 'uint32_t') baseType = 'int';
if (cType === 'bool') return 'bool'; else if (cType === 'bool') baseType = 'bool';
// Handle primitive pointer types // Handle primitive pointer types
if (cType === 'void*' || cType === 'void *') return 'Pointer<Void>'; else if (cType === 'void*' || cType === 'void *') baseType = 'Pointer<Void>';
if (cType === 'float*' || cType === 'float *') return 'Pointer<Float>'; else if (cType === 'float*' || cType === 'float *') baseType = 'Pointer<Float>';
if (cType === 'uint32_t*' || cType === 'uint32_t *') return 'Pointer<Uint32>'; else if (cType === 'uint32_t*' || cType === 'uint32_t *') baseType = 'Pointer<Uint32>';
if (cType === 'uint16_t*' || cType === 'uint16_t *') return 'Pointer<Uint16>'; else if (cType === 'uint16_t*' || cType === 'uint16_t *') baseType = 'Pointer<Uint16>';
if (cType === 'int*' || cType === 'int *') return 'Pointer<Int32>'; else if (cType === 'int*' || cType === 'int *') baseType = 'Pointer<Int32>';
return this.toDartTypeName(cType); else baseType = this.toDartTypeName(cType);
return nullable ? `${baseType}?` : baseType;
} }
private toDartParameterType (param: CParameter): string { private toDartParameterType (param: CParameter): string {
@ -1143,7 +1150,7 @@ ${declaration} {`;
if (param.cType === 'void*' || param.cType === 'void *') { if (param.cType === 'void*' || param.cType === 'void *') {
return 'Pointer<Void>'; return 'Pointer<Void>';
} }
return this.toDartReturnType(param.cType); return this.toDartReturnType(param.cType, param.isNullable);
} }
private convertDartToC (dartValue: string, param: CParameter): string { private convertDartToC (dartValue: string, param: CParameter): string {
@ -1152,38 +1159,62 @@ ${declaration} {`;
} }
if (this.enumNames.has(param.cType)) { if (this.enumNames.has(param.cType)) {
if (param.isNullable) {
return `${dartValue}?.value ?? 0`;
}
return `${dartValue}.value`; return `${dartValue}.value`;
} }
if (param.cType.startsWith('spine_')) { if (param.cType.startsWith('spine_')) {
if (param.isNullable) {
return `${dartValue}?.nativePtr.cast() ?? Pointer.fromAddress(0)`;
}
return `${dartValue}.nativePtr.cast()`; return `${dartValue}.nativePtr.cast()`;
} }
return dartValue; return dartValue;
} }
private generateReturnConversion (cReturnType: string, resultVar: string): string { private generateReturnConversion (cReturnType: string, resultVar: string, nullable?: boolean): string {
if (cReturnType === 'char*' || cReturnType === 'char *' || cReturnType === 'const char*' || cReturnType === 'const char *') { if (cReturnType === 'char*' || cReturnType === 'char *' || cReturnType === 'const char*' || cReturnType === 'const char *') {
if (nullable) {
return `return ${resultVar}.address == 0 ? null : ${resultVar}.cast<Utf8>().toDartString();`;
}
return `return ${resultVar}.cast<Utf8>().toDartString();`; return `return ${resultVar}.cast<Utf8>().toDartString();`;
} }
if (this.enumNames.has(cReturnType)) { if (this.enumNames.has(cReturnType)) {
const dartType = this.toDartTypeName(cReturnType); const dartType = this.toDartTypeName(cReturnType);
if (nullable) {
return `return ${resultVar} == 0 ? null : ${dartType}.fromValue(${resultVar});`;
}
return `return ${dartType}.fromValue(${resultVar});`; return `return ${dartType}.fromValue(${resultVar});`;
} }
if (cReturnType.startsWith('spine_array_')) { if (cReturnType.startsWith('spine_array_')) {
const dartType = this.toDartTypeName(cReturnType); const dartType = this.toDartTypeName(cReturnType);
if (nullable) {
return `return ${resultVar}.address == 0 ? null : ${dartType}.fromPointer(${resultVar});`;
}
return `return ${dartType}.fromPointer(${resultVar});`; return `return ${dartType}.fromPointer(${resultVar});`;
} }
if (cReturnType.startsWith('spine_')) { if (cReturnType.startsWith('spine_')) {
const dartType = this.toDartTypeName(cReturnType); const dartType = this.toDartTypeName(cReturnType);
const cClass = this.classMap.get(cReturnType); const cClass = this.classMap.get(cReturnType);
if (cClass && this.isAbstract(cClass)) {
return this.generateRttiBasedInstantiation(dartType, resultVar, cClass); if (nullable) {
if (cClass && this.isAbstract(cClass)) {
return `if (${resultVar}.address == 0) return null;
${this.generateRttiBasedInstantiation(dartType, resultVar, cClass)}`;
}
return `return ${resultVar}.address == 0 ? null : ${dartType}.fromPointer(${resultVar});`;
} else {
if (cClass && this.isAbstract(cClass)) {
return this.generateRttiBasedInstantiation(dartType, resultVar, cClass);
}
return `return ${dartType}.fromPointer(${resultVar});`;
} }
return `return ${dartType}.fromPointer(${resultVar});`;
} }
return `return ${resultVar};`; return `return ${resultVar};`;

View File

@ -80,10 +80,10 @@ class Animation {
SpineBindings.bindings.spine_animation_set_duration(_ptr, value); SpineBindings.bindings.spine_animation_set_duration(_ptr, value);
} }
void apply(Skeleton skeleton, double lastTime, double time, bool loop, ArrayEvent pEvents, double alpha, void apply(Skeleton skeleton, double lastTime, double time, bool loop, ArrayEvent? pEvents, double alpha,
MixBlend blend, MixDirection direction, bool appliedPose) { MixBlend blend, MixDirection direction, bool appliedPose) {
SpineBindings.bindings.spine_animation_apply(_ptr, skeleton.nativePtr.cast(), lastTime, time, loop, SpineBindings.bindings.spine_animation_apply(_ptr, skeleton.nativePtr.cast(), lastTime, time, loop,
pEvents.nativePtr.cast(), alpha, blend.value, direction.value, appliedPose); pEvents?.nativePtr.cast() ?? Pointer.fromAddress(0), alpha, blend.value, direction.value, appliedPose);
} }
String get name { String get name {

View File

@ -89,9 +89,9 @@ class AnimationState {
SpineBindings.bindings.spine_animation_state_set_empty_animations(_ptr, value); SpineBindings.bindings.spine_animation_state_set_empty_animations(_ptr, value);
} }
TrackEntry getCurrent(int trackIndex) { TrackEntry? getCurrent(int trackIndex) {
final result = SpineBindings.bindings.spine_animation_state_get_current(_ptr, trackIndex); final result = SpineBindings.bindings.spine_animation_state_get_current(_ptr, trackIndex);
return TrackEntry.fromPointer(result); return result.address == 0 ? null : TrackEntry.fromPointer(result);
} }
AnimationStateData get data { AnimationStateData get data {
@ -130,11 +130,12 @@ class AnimationState {
return result; return result;
} }
void disposeTrackEntry(TrackEntry entry) { void disposeTrackEntry(TrackEntry? entry) {
SpineBindings.bindings.spine_animation_state_dispose_track_entry(_ptr, entry.nativePtr.cast()); SpineBindings.bindings
.spine_animation_state_dispose_track_entry(_ptr, entry?.nativePtr.cast() ?? Pointer.fromAddress(0));
} }
Pointer<Void> get rendererObject { Pointer<Void>? get rendererObject {
final result = SpineBindings.bindings.spine_animation_state_get_renderer_object(_ptr); final result = SpineBindings.bindings.spine_animation_state_get_renderer_object(_ptr);
return result; return result;
} }

View File

@ -198,7 +198,7 @@ class ArrayPropertyId extends NativeArray<int> {
} }
/// ArrayAnimation wrapper /// ArrayAnimation wrapper
class ArrayAnimation extends NativeArray<Animation> { class ArrayAnimation extends NativeArray<Animation?> {
ArrayAnimation.fromPointer(Pointer<spine_array_animation_wrapper> super.ptr); ArrayAnimation.fromPointer(Pointer<spine_array_animation_wrapper> super.ptr);
@override @override
@ -207,17 +207,17 @@ class ArrayAnimation extends NativeArray<Animation> {
} }
@override @override
Animation operator [](int index) { Animation? operator [](int index) {
if (index < 0 || index >= length) { if (index < 0 || index >= length) {
throw RangeError.index(index, this, 'index'); throw RangeError.index(index, this, 'index');
} }
final buffer = SpineBindings.bindings.spine_array_animation_buffer(nativePtr.cast()); final buffer = SpineBindings.bindings.spine_array_animation_buffer(nativePtr.cast());
return Animation.fromPointer(buffer[index]); return buffer[index].address == 0 ? null : Animation.fromPointer(buffer[index]);
} }
} }
/// ArrayAtlasPage wrapper /// ArrayAtlasPage wrapper
class ArrayAtlasPage extends NativeArray<AtlasPage> { class ArrayAtlasPage extends NativeArray<AtlasPage?> {
ArrayAtlasPage.fromPointer(Pointer<spine_array_atlas_page_wrapper> super.ptr); ArrayAtlasPage.fromPointer(Pointer<spine_array_atlas_page_wrapper> super.ptr);
@override @override
@ -226,17 +226,17 @@ class ArrayAtlasPage extends NativeArray<AtlasPage> {
} }
@override @override
AtlasPage operator [](int index) { AtlasPage? operator [](int index) {
if (index < 0 || index >= length) { if (index < 0 || index >= length) {
throw RangeError.index(index, this, 'index'); throw RangeError.index(index, this, 'index');
} }
final buffer = SpineBindings.bindings.spine_array_atlas_page_buffer(nativePtr.cast()); final buffer = SpineBindings.bindings.spine_array_atlas_page_buffer(nativePtr.cast());
return AtlasPage.fromPointer(buffer[index]); return buffer[index].address == 0 ? null : AtlasPage.fromPointer(buffer[index]);
} }
} }
/// ArrayAtlasRegion wrapper /// ArrayAtlasRegion wrapper
class ArrayAtlasRegion extends NativeArray<AtlasRegion> { class ArrayAtlasRegion extends NativeArray<AtlasRegion?> {
ArrayAtlasRegion.fromPointer(Pointer<spine_array_atlas_region_wrapper> super.ptr); ArrayAtlasRegion.fromPointer(Pointer<spine_array_atlas_region_wrapper> super.ptr);
@override @override
@ -245,17 +245,17 @@ class ArrayAtlasRegion extends NativeArray<AtlasRegion> {
} }
@override @override
AtlasRegion operator [](int index) { AtlasRegion? operator [](int index) {
if (index < 0 || index >= length) { if (index < 0 || index >= length) {
throw RangeError.index(index, this, 'index'); throw RangeError.index(index, this, 'index');
} }
final buffer = SpineBindings.bindings.spine_array_atlas_region_buffer(nativePtr.cast()); final buffer = SpineBindings.bindings.spine_array_atlas_region_buffer(nativePtr.cast());
return AtlasRegion.fromPointer(buffer[index]); return buffer[index].address == 0 ? null : AtlasRegion.fromPointer(buffer[index]);
} }
} }
/// ArrayAttachment wrapper /// ArrayAttachment wrapper
class ArrayAttachment extends NativeArray<Attachment> { class ArrayAttachment extends NativeArray<Attachment?> {
ArrayAttachment.fromPointer(Pointer<spine_array_attachment_wrapper> super.ptr); ArrayAttachment.fromPointer(Pointer<spine_array_attachment_wrapper> super.ptr);
@override @override
@ -264,11 +264,12 @@ class ArrayAttachment extends NativeArray<Attachment> {
} }
@override @override
Attachment operator [](int index) { Attachment? operator [](int index) {
if (index < 0 || index >= length) { if (index < 0 || index >= length) {
throw RangeError.index(index, this, 'index'); throw RangeError.index(index, this, 'index');
} }
final buffer = SpineBindings.bindings.spine_array_attachment_buffer(nativePtr.cast()); final buffer = SpineBindings.bindings.spine_array_attachment_buffer(nativePtr.cast());
if (buffer[index].address == 0) return null;
final rtti = SpineBindings.bindings.spine_attachment_get_rtti(buffer[index]); final rtti = SpineBindings.bindings.spine_attachment_get_rtti(buffer[index]);
final className = SpineBindings.bindings.spine_rtti_get_class_name(rtti).cast<Utf8>().toDartString(); final className = SpineBindings.bindings.spine_rtti_get_class_name(rtti).cast<Utf8>().toDartString();
switch (className) { switch (className) {
@ -291,7 +292,7 @@ class ArrayAttachment extends NativeArray<Attachment> {
} }
/// ArrayBone wrapper /// ArrayBone wrapper
class ArrayBone extends NativeArray<Bone> { class ArrayBone extends NativeArray<Bone?> {
ArrayBone.fromPointer(Pointer<spine_array_bone_wrapper> super.ptr); ArrayBone.fromPointer(Pointer<spine_array_bone_wrapper> super.ptr);
@override @override
@ -300,17 +301,17 @@ class ArrayBone extends NativeArray<Bone> {
} }
@override @override
Bone operator [](int index) { Bone? operator [](int index) {
if (index < 0 || index >= length) { if (index < 0 || index >= length) {
throw RangeError.index(index, this, 'index'); throw RangeError.index(index, this, 'index');
} }
final buffer = SpineBindings.bindings.spine_array_bone_buffer(nativePtr.cast()); final buffer = SpineBindings.bindings.spine_array_bone_buffer(nativePtr.cast());
return Bone.fromPointer(buffer[index]); return buffer[index].address == 0 ? null : Bone.fromPointer(buffer[index]);
} }
} }
/// ArrayBoneData wrapper /// ArrayBoneData wrapper
class ArrayBoneData extends NativeArray<BoneData> { class ArrayBoneData extends NativeArray<BoneData?> {
ArrayBoneData.fromPointer(Pointer<spine_array_bone_data_wrapper> super.ptr); ArrayBoneData.fromPointer(Pointer<spine_array_bone_data_wrapper> super.ptr);
@override @override
@ -319,17 +320,17 @@ class ArrayBoneData extends NativeArray<BoneData> {
} }
@override @override
BoneData operator [](int index) { BoneData? operator [](int index) {
if (index < 0 || index >= length) { if (index < 0 || index >= length) {
throw RangeError.index(index, this, 'index'); throw RangeError.index(index, this, 'index');
} }
final buffer = SpineBindings.bindings.spine_array_bone_data_buffer(nativePtr.cast()); final buffer = SpineBindings.bindings.spine_array_bone_data_buffer(nativePtr.cast());
return BoneData.fromPointer(buffer[index]); return buffer[index].address == 0 ? null : BoneData.fromPointer(buffer[index]);
} }
} }
/// ArrayBonePose wrapper /// ArrayBonePose wrapper
class ArrayBonePose extends NativeArray<BonePose> { class ArrayBonePose extends NativeArray<BonePose?> {
ArrayBonePose.fromPointer(Pointer<spine_array_bone_pose_wrapper> super.ptr); ArrayBonePose.fromPointer(Pointer<spine_array_bone_pose_wrapper> super.ptr);
@override @override
@ -338,17 +339,17 @@ class ArrayBonePose extends NativeArray<BonePose> {
} }
@override @override
BonePose operator [](int index) { BonePose? operator [](int index) {
if (index < 0 || index >= length) { if (index < 0 || index >= length) {
throw RangeError.index(index, this, 'index'); throw RangeError.index(index, this, 'index');
} }
final buffer = SpineBindings.bindings.spine_array_bone_pose_buffer(nativePtr.cast()); final buffer = SpineBindings.bindings.spine_array_bone_pose_buffer(nativePtr.cast());
return BonePose.fromPointer(buffer[index]); return buffer[index].address == 0 ? null : BonePose.fromPointer(buffer[index]);
} }
} }
/// ArrayBoundingBoxAttachment wrapper /// ArrayBoundingBoxAttachment wrapper
class ArrayBoundingBoxAttachment extends NativeArray<BoundingBoxAttachment> { class ArrayBoundingBoxAttachment extends NativeArray<BoundingBoxAttachment?> {
ArrayBoundingBoxAttachment.fromPointer(Pointer<spine_array_bounding_box_attachment_wrapper> super.ptr); ArrayBoundingBoxAttachment.fromPointer(Pointer<spine_array_bounding_box_attachment_wrapper> super.ptr);
@override @override
@ -357,17 +358,17 @@ class ArrayBoundingBoxAttachment extends NativeArray<BoundingBoxAttachment> {
} }
@override @override
BoundingBoxAttachment operator [](int index) { BoundingBoxAttachment? operator [](int index) {
if (index < 0 || index >= length) { if (index < 0 || index >= length) {
throw RangeError.index(index, this, 'index'); throw RangeError.index(index, this, 'index');
} }
final buffer = SpineBindings.bindings.spine_array_bounding_box_attachment_buffer(nativePtr.cast()); final buffer = SpineBindings.bindings.spine_array_bounding_box_attachment_buffer(nativePtr.cast());
return BoundingBoxAttachment.fromPointer(buffer[index]); return buffer[index].address == 0 ? null : BoundingBoxAttachment.fromPointer(buffer[index]);
} }
} }
/// ArrayConstraint wrapper /// ArrayConstraint wrapper
class ArrayConstraint extends NativeArray<Constraint> { class ArrayConstraint extends NativeArray<Constraint?> {
ArrayConstraint.fromPointer(Pointer<spine_array_constraint_wrapper> super.ptr); ArrayConstraint.fromPointer(Pointer<spine_array_constraint_wrapper> super.ptr);
@override @override
@ -376,11 +377,12 @@ class ArrayConstraint extends NativeArray<Constraint> {
} }
@override @override
Constraint operator [](int index) { Constraint? operator [](int index) {
if (index < 0 || index >= length) { if (index < 0 || index >= length) {
throw RangeError.index(index, this, 'index'); throw RangeError.index(index, this, 'index');
} }
final buffer = SpineBindings.bindings.spine_array_constraint_buffer(nativePtr.cast()); final buffer = SpineBindings.bindings.spine_array_constraint_buffer(nativePtr.cast());
if (buffer[index].address == 0) return null;
final rtti = SpineBindings.bindings.spine_constraint_get_rtti(buffer[index]); final rtti = SpineBindings.bindings.spine_constraint_get_rtti(buffer[index]);
final className = SpineBindings.bindings.spine_rtti_get_class_name(rtti).cast<Utf8>().toDartString(); final className = SpineBindings.bindings.spine_rtti_get_class_name(rtti).cast<Utf8>().toDartString();
switch (className) { switch (className) {
@ -401,7 +403,7 @@ class ArrayConstraint extends NativeArray<Constraint> {
} }
/// ArrayConstraintData wrapper /// ArrayConstraintData wrapper
class ArrayConstraintData extends NativeArray<ConstraintData> { class ArrayConstraintData extends NativeArray<ConstraintData?> {
ArrayConstraintData.fromPointer(Pointer<spine_array_constraint_data_wrapper> super.ptr); ArrayConstraintData.fromPointer(Pointer<spine_array_constraint_data_wrapper> super.ptr);
@override @override
@ -410,11 +412,12 @@ class ArrayConstraintData extends NativeArray<ConstraintData> {
} }
@override @override
ConstraintData operator [](int index) { ConstraintData? operator [](int index) {
if (index < 0 || index >= length) { if (index < 0 || index >= length) {
throw RangeError.index(index, this, 'index'); throw RangeError.index(index, this, 'index');
} }
final buffer = SpineBindings.bindings.spine_array_constraint_data_buffer(nativePtr.cast()); final buffer = SpineBindings.bindings.spine_array_constraint_data_buffer(nativePtr.cast());
if (buffer[index].address == 0) return null;
final rtti = SpineBindings.bindings.spine_constraint_data_get_rtti(buffer[index]); final rtti = SpineBindings.bindings.spine_constraint_data_get_rtti(buffer[index]);
final className = SpineBindings.bindings.spine_rtti_get_class_name(rtti).cast<Utf8>().toDartString(); final className = SpineBindings.bindings.spine_rtti_get_class_name(rtti).cast<Utf8>().toDartString();
switch (className) { switch (className) {
@ -435,7 +438,7 @@ class ArrayConstraintData extends NativeArray<ConstraintData> {
} }
/// ArrayEvent wrapper /// ArrayEvent wrapper
class ArrayEvent extends NativeArray<Event> { class ArrayEvent extends NativeArray<Event?> {
ArrayEvent.fromPointer(Pointer<spine_array_event_wrapper> super.ptr); ArrayEvent.fromPointer(Pointer<spine_array_event_wrapper> super.ptr);
@override @override
@ -444,17 +447,17 @@ class ArrayEvent extends NativeArray<Event> {
} }
@override @override
Event operator [](int index) { Event? operator [](int index) {
if (index < 0 || index >= length) { if (index < 0 || index >= length) {
throw RangeError.index(index, this, 'index'); throw RangeError.index(index, this, 'index');
} }
final buffer = SpineBindings.bindings.spine_array_event_buffer(nativePtr.cast()); final buffer = SpineBindings.bindings.spine_array_event_buffer(nativePtr.cast());
return Event.fromPointer(buffer[index]); return buffer[index].address == 0 ? null : Event.fromPointer(buffer[index]);
} }
} }
/// ArrayEventData wrapper /// ArrayEventData wrapper
class ArrayEventData extends NativeArray<EventData> { class ArrayEventData extends NativeArray<EventData?> {
ArrayEventData.fromPointer(Pointer<spine_array_event_data_wrapper> super.ptr); ArrayEventData.fromPointer(Pointer<spine_array_event_data_wrapper> super.ptr);
@override @override
@ -463,17 +466,17 @@ class ArrayEventData extends NativeArray<EventData> {
} }
@override @override
EventData operator [](int index) { EventData? operator [](int index) {
if (index < 0 || index >= length) { if (index < 0 || index >= length) {
throw RangeError.index(index, this, 'index'); throw RangeError.index(index, this, 'index');
} }
final buffer = SpineBindings.bindings.spine_array_event_data_buffer(nativePtr.cast()); final buffer = SpineBindings.bindings.spine_array_event_data_buffer(nativePtr.cast());
return EventData.fromPointer(buffer[index]); return buffer[index].address == 0 ? null : EventData.fromPointer(buffer[index]);
} }
} }
/// ArrayFromProperty wrapper /// ArrayFromProperty wrapper
class ArrayFromProperty extends NativeArray<FromProperty> { class ArrayFromProperty extends NativeArray<FromProperty?> {
ArrayFromProperty.fromPointer(Pointer<spine_array_from_property_wrapper> super.ptr); ArrayFromProperty.fromPointer(Pointer<spine_array_from_property_wrapper> super.ptr);
@override @override
@ -482,11 +485,12 @@ class ArrayFromProperty extends NativeArray<FromProperty> {
} }
@override @override
FromProperty operator [](int index) { FromProperty? operator [](int index) {
if (index < 0 || index >= length) { if (index < 0 || index >= length) {
throw RangeError.index(index, this, 'index'); throw RangeError.index(index, this, 'index');
} }
final buffer = SpineBindings.bindings.spine_array_from_property_buffer(nativePtr.cast()); final buffer = SpineBindings.bindings.spine_array_from_property_buffer(nativePtr.cast());
if (buffer[index].address == 0) return null;
final rtti = SpineBindings.bindings.spine_from_property_get_rtti(buffer[index]); final rtti = SpineBindings.bindings.spine_from_property_get_rtti(buffer[index]);
final className = SpineBindings.bindings.spine_rtti_get_class_name(rtti).cast<Utf8>().toDartString(); final className = SpineBindings.bindings.spine_rtti_get_class_name(rtti).cast<Utf8>().toDartString();
switch (className) { switch (className) {
@ -509,7 +513,7 @@ class ArrayFromProperty extends NativeArray<FromProperty> {
} }
/// ArrayPhysicsConstraint wrapper /// ArrayPhysicsConstraint wrapper
class ArrayPhysicsConstraint extends NativeArray<PhysicsConstraint> { class ArrayPhysicsConstraint extends NativeArray<PhysicsConstraint?> {
ArrayPhysicsConstraint.fromPointer(Pointer<spine_array_physics_constraint_wrapper> super.ptr); ArrayPhysicsConstraint.fromPointer(Pointer<spine_array_physics_constraint_wrapper> super.ptr);
@override @override
@ -518,17 +522,17 @@ class ArrayPhysicsConstraint extends NativeArray<PhysicsConstraint> {
} }
@override @override
PhysicsConstraint operator [](int index) { PhysicsConstraint? operator [](int index) {
if (index < 0 || index >= length) { if (index < 0 || index >= length) {
throw RangeError.index(index, this, 'index'); throw RangeError.index(index, this, 'index');
} }
final buffer = SpineBindings.bindings.spine_array_physics_constraint_buffer(nativePtr.cast()); final buffer = SpineBindings.bindings.spine_array_physics_constraint_buffer(nativePtr.cast());
return PhysicsConstraint.fromPointer(buffer[index]); return buffer[index].address == 0 ? null : PhysicsConstraint.fromPointer(buffer[index]);
} }
} }
/// ArrayPolygon wrapper /// ArrayPolygon wrapper
class ArrayPolygon extends NativeArray<Polygon> { class ArrayPolygon extends NativeArray<Polygon?> {
ArrayPolygon.fromPointer(Pointer<spine_array_polygon_wrapper> super.ptr); ArrayPolygon.fromPointer(Pointer<spine_array_polygon_wrapper> super.ptr);
@override @override
@ -537,17 +541,17 @@ class ArrayPolygon extends NativeArray<Polygon> {
} }
@override @override
Polygon operator [](int index) { Polygon? operator [](int index) {
if (index < 0 || index >= length) { if (index < 0 || index >= length) {
throw RangeError.index(index, this, 'index'); throw RangeError.index(index, this, 'index');
} }
final buffer = SpineBindings.bindings.spine_array_polygon_buffer(nativePtr.cast()); final buffer = SpineBindings.bindings.spine_array_polygon_buffer(nativePtr.cast());
return Polygon.fromPointer(buffer[index]); return buffer[index].address == 0 ? null : Polygon.fromPointer(buffer[index]);
} }
} }
/// ArraySkin wrapper /// ArraySkin wrapper
class ArraySkin extends NativeArray<Skin> { class ArraySkin extends NativeArray<Skin?> {
ArraySkin.fromPointer(Pointer<spine_array_skin_wrapper> super.ptr); ArraySkin.fromPointer(Pointer<spine_array_skin_wrapper> super.ptr);
@override @override
@ -556,17 +560,17 @@ class ArraySkin extends NativeArray<Skin> {
} }
@override @override
Skin operator [](int index) { Skin? operator [](int index) {
if (index < 0 || index >= length) { if (index < 0 || index >= length) {
throw RangeError.index(index, this, 'index'); throw RangeError.index(index, this, 'index');
} }
final buffer = SpineBindings.bindings.spine_array_skin_buffer(nativePtr.cast()); final buffer = SpineBindings.bindings.spine_array_skin_buffer(nativePtr.cast());
return Skin.fromPointer(buffer[index]); return buffer[index].address == 0 ? null : Skin.fromPointer(buffer[index]);
} }
} }
/// ArraySlot wrapper /// ArraySlot wrapper
class ArraySlot extends NativeArray<Slot> { class ArraySlot extends NativeArray<Slot?> {
ArraySlot.fromPointer(Pointer<spine_array_slot_wrapper> super.ptr); ArraySlot.fromPointer(Pointer<spine_array_slot_wrapper> super.ptr);
@override @override
@ -575,17 +579,17 @@ class ArraySlot extends NativeArray<Slot> {
} }
@override @override
Slot operator [](int index) { Slot? operator [](int index) {
if (index < 0 || index >= length) { if (index < 0 || index >= length) {
throw RangeError.index(index, this, 'index'); throw RangeError.index(index, this, 'index');
} }
final buffer = SpineBindings.bindings.spine_array_slot_buffer(nativePtr.cast()); final buffer = SpineBindings.bindings.spine_array_slot_buffer(nativePtr.cast());
return Slot.fromPointer(buffer[index]); return buffer[index].address == 0 ? null : Slot.fromPointer(buffer[index]);
} }
} }
/// ArraySlotData wrapper /// ArraySlotData wrapper
class ArraySlotData extends NativeArray<SlotData> { class ArraySlotData extends NativeArray<SlotData?> {
ArraySlotData.fromPointer(Pointer<spine_array_slot_data_wrapper> super.ptr); ArraySlotData.fromPointer(Pointer<spine_array_slot_data_wrapper> super.ptr);
@override @override
@ -594,17 +598,17 @@ class ArraySlotData extends NativeArray<SlotData> {
} }
@override @override
SlotData operator [](int index) { SlotData? operator [](int index) {
if (index < 0 || index >= length) { if (index < 0 || index >= length) {
throw RangeError.index(index, this, 'index'); throw RangeError.index(index, this, 'index');
} }
final buffer = SpineBindings.bindings.spine_array_slot_data_buffer(nativePtr.cast()); final buffer = SpineBindings.bindings.spine_array_slot_data_buffer(nativePtr.cast());
return SlotData.fromPointer(buffer[index]); return buffer[index].address == 0 ? null : SlotData.fromPointer(buffer[index]);
} }
} }
/// ArrayTextureRegion wrapper /// ArrayTextureRegion wrapper
class ArrayTextureRegion extends NativeArray<TextureRegion> { class ArrayTextureRegion extends NativeArray<TextureRegion?> {
ArrayTextureRegion.fromPointer(Pointer<spine_array_texture_region_wrapper> super.ptr); ArrayTextureRegion.fromPointer(Pointer<spine_array_texture_region_wrapper> super.ptr);
@override @override
@ -613,17 +617,17 @@ class ArrayTextureRegion extends NativeArray<TextureRegion> {
} }
@override @override
TextureRegion operator [](int index) { TextureRegion? operator [](int index) {
if (index < 0 || index >= length) { if (index < 0 || index >= length) {
throw RangeError.index(index, this, 'index'); throw RangeError.index(index, this, 'index');
} }
final buffer = SpineBindings.bindings.spine_array_texture_region_buffer(nativePtr.cast()); final buffer = SpineBindings.bindings.spine_array_texture_region_buffer(nativePtr.cast());
return TextureRegion.fromPointer(buffer[index]); return buffer[index].address == 0 ? null : TextureRegion.fromPointer(buffer[index]);
} }
} }
/// ArrayTimeline wrapper /// ArrayTimeline wrapper
class ArrayTimeline extends NativeArray<Timeline> { class ArrayTimeline extends NativeArray<Timeline?> {
ArrayTimeline.fromPointer(Pointer<spine_array_timeline_wrapper> super.ptr); ArrayTimeline.fromPointer(Pointer<spine_array_timeline_wrapper> super.ptr);
@override @override
@ -632,11 +636,12 @@ class ArrayTimeline extends NativeArray<Timeline> {
} }
@override @override
Timeline operator [](int index) { Timeline? operator [](int index) {
if (index < 0 || index >= length) { if (index < 0 || index >= length) {
throw RangeError.index(index, this, 'index'); throw RangeError.index(index, this, 'index');
} }
final buffer = SpineBindings.bindings.spine_array_timeline_buffer(nativePtr.cast()); final buffer = SpineBindings.bindings.spine_array_timeline_buffer(nativePtr.cast());
if (buffer[index].address == 0) return null;
final rtti = SpineBindings.bindings.spine_timeline_get_rtti(buffer[index]); final rtti = SpineBindings.bindings.spine_timeline_get_rtti(buffer[index]);
final className = SpineBindings.bindings.spine_rtti_get_class_name(rtti).cast<Utf8>().toDartString(); final className = SpineBindings.bindings.spine_rtti_get_class_name(rtti).cast<Utf8>().toDartString();
switch (className) { switch (className) {
@ -719,7 +724,7 @@ class ArrayTimeline extends NativeArray<Timeline> {
} }
/// ArrayToProperty wrapper /// ArrayToProperty wrapper
class ArrayToProperty extends NativeArray<ToProperty> { class ArrayToProperty extends NativeArray<ToProperty?> {
ArrayToProperty.fromPointer(Pointer<spine_array_to_property_wrapper> super.ptr); ArrayToProperty.fromPointer(Pointer<spine_array_to_property_wrapper> super.ptr);
@override @override
@ -728,11 +733,12 @@ class ArrayToProperty extends NativeArray<ToProperty> {
} }
@override @override
ToProperty operator [](int index) { ToProperty? operator [](int index) {
if (index < 0 || index >= length) { if (index < 0 || index >= length) {
throw RangeError.index(index, this, 'index'); throw RangeError.index(index, this, 'index');
} }
final buffer = SpineBindings.bindings.spine_array_to_property_buffer(nativePtr.cast()); 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 rtti = SpineBindings.bindings.spine_to_property_get_rtti(buffer[index]);
final className = SpineBindings.bindings.spine_rtti_get_class_name(rtti).cast<Utf8>().toDartString(); final className = SpineBindings.bindings.spine_rtti_get_class_name(rtti).cast<Utf8>().toDartString();
switch (className) { switch (className) {
@ -755,7 +761,7 @@ class ArrayToProperty extends NativeArray<ToProperty> {
} }
/// ArrayTrackEntry wrapper /// ArrayTrackEntry wrapper
class ArrayTrackEntry extends NativeArray<TrackEntry> { class ArrayTrackEntry extends NativeArray<TrackEntry?> {
ArrayTrackEntry.fromPointer(Pointer<spine_array_track_entry_wrapper> super.ptr); ArrayTrackEntry.fromPointer(Pointer<spine_array_track_entry_wrapper> super.ptr);
@override @override
@ -764,17 +770,17 @@ class ArrayTrackEntry extends NativeArray<TrackEntry> {
} }
@override @override
TrackEntry operator [](int index) { TrackEntry? operator [](int index) {
if (index < 0 || index >= length) { if (index < 0 || index >= length) {
throw RangeError.index(index, this, 'index'); throw RangeError.index(index, this, 'index');
} }
final buffer = SpineBindings.bindings.spine_array_track_entry_buffer(nativePtr.cast()); final buffer = SpineBindings.bindings.spine_array_track_entry_buffer(nativePtr.cast());
return TrackEntry.fromPointer(buffer[index]); return buffer[index].address == 0 ? null : TrackEntry.fromPointer(buffer[index]);
} }
} }
/// ArrayUpdate wrapper /// ArrayUpdate wrapper
class ArrayUpdate extends NativeArray<Update> { class ArrayUpdate extends NativeArray<Update?> {
ArrayUpdate.fromPointer(Pointer<spine_array_update_wrapper> super.ptr); ArrayUpdate.fromPointer(Pointer<spine_array_update_wrapper> super.ptr);
@override @override
@ -783,11 +789,12 @@ class ArrayUpdate extends NativeArray<Update> {
} }
@override @override
Update operator [](int index) { Update? operator [](int index) {
if (index < 0 || index >= length) { if (index < 0 || index >= length) {
throw RangeError.index(index, this, 'index'); throw RangeError.index(index, this, 'index');
} }
final buffer = SpineBindings.bindings.spine_array_update_buffer(nativePtr.cast()); 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 rtti = SpineBindings.bindings.spine_update_get_rtti(buffer[index]);
final className = SpineBindings.bindings.spine_rtti_get_class_name(rtti).cast<Utf8>().toDartString(); final className = SpineBindings.bindings.spine_rtti_get_class_name(rtti).cast<Utf8>().toDartString();
switch (className) { switch (className) {

View File

@ -53,9 +53,9 @@ class Atlas {
SpineBindings.bindings.spine_atlas_flip_v(_ptr); SpineBindings.bindings.spine_atlas_flip_v(_ptr);
} }
AtlasRegion findRegion(String name) { AtlasRegion? findRegion(String name) {
final result = SpineBindings.bindings.spine_atlas_find_region(_ptr, name.toNativeUtf8().cast<Char>()); final result = SpineBindings.bindings.spine_atlas_find_region(_ptr, name.toNativeUtf8().cast<Char>());
return AtlasRegion.fromPointer(result); return result.address == 0 ? null : AtlasRegion.fromPointer(result);
} }
ArrayAtlasPage get pages { ArrayAtlasPage get pages {

View File

@ -65,54 +65,58 @@ class AtlasAttachmentLoader implements AttachmentLoader {
} }
@override @override
RegionAttachment newRegionAttachment(Skin skin, String name, String path, Sequence sequence) { RegionAttachment? newRegionAttachment(Skin skin, String name, String path, Sequence? sequence) {
final result = SpineBindings.bindings.spine_atlas_attachment_loader_new_region_attachment( final result = SpineBindings.bindings.spine_atlas_attachment_loader_new_region_attachment(
_ptr, _ptr,
skin.nativePtr.cast(), skin.nativePtr.cast(),
name.toNativeUtf8().cast<Char>(), name.toNativeUtf8().cast<Char>(),
path.toNativeUtf8().cast<Char>(), path.toNativeUtf8().cast<Char>(),
sequence.nativePtr.cast()); sequence?.nativePtr.cast() ?? Pointer.fromAddress(0));
return RegionAttachment.fromPointer(result); return result.address == 0 ? null : RegionAttachment.fromPointer(result);
} }
@override @override
MeshAttachment newMeshAttachment(Skin skin, String name, String path, Sequence sequence) { MeshAttachment? newMeshAttachment(Skin skin, String name, String path, Sequence? sequence) {
final result = SpineBindings.bindings.spine_atlas_attachment_loader_new_mesh_attachment(_ptr, skin.nativePtr.cast(), final result = SpineBindings.bindings.spine_atlas_attachment_loader_new_mesh_attachment(
name.toNativeUtf8().cast<Char>(), path.toNativeUtf8().cast<Char>(), sequence.nativePtr.cast()); _ptr,
return MeshAttachment.fromPointer(result); skin.nativePtr.cast(),
name.toNativeUtf8().cast<Char>(),
path.toNativeUtf8().cast<Char>(),
sequence?.nativePtr.cast() ?? Pointer.fromAddress(0));
return result.address == 0 ? null : MeshAttachment.fromPointer(result);
} }
@override @override
BoundingBoxAttachment newBoundingBoxAttachment(Skin skin, String name) { BoundingBoxAttachment? newBoundingBoxAttachment(Skin skin, String name) {
final result = SpineBindings.bindings.spine_atlas_attachment_loader_new_bounding_box_attachment( final result = SpineBindings.bindings.spine_atlas_attachment_loader_new_bounding_box_attachment(
_ptr, skin.nativePtr.cast(), name.toNativeUtf8().cast<Char>()); _ptr, skin.nativePtr.cast(), name.toNativeUtf8().cast<Char>());
return BoundingBoxAttachment.fromPointer(result); return result.address == 0 ? null : BoundingBoxAttachment.fromPointer(result);
} }
@override @override
PathAttachment newPathAttachment(Skin skin, String name) { PathAttachment? newPathAttachment(Skin skin, String name) {
final result = SpineBindings.bindings.spine_atlas_attachment_loader_new_path_attachment( final result = SpineBindings.bindings.spine_atlas_attachment_loader_new_path_attachment(
_ptr, skin.nativePtr.cast(), name.toNativeUtf8().cast<Char>()); _ptr, skin.nativePtr.cast(), name.toNativeUtf8().cast<Char>());
return PathAttachment.fromPointer(result); return result.address == 0 ? null : PathAttachment.fromPointer(result);
} }
@override @override
PointAttachment newPointAttachment(Skin skin, String name) { PointAttachment? newPointAttachment(Skin skin, String name) {
final result = SpineBindings.bindings.spine_atlas_attachment_loader_new_point_attachment( final result = SpineBindings.bindings.spine_atlas_attachment_loader_new_point_attachment(
_ptr, skin.nativePtr.cast(), name.toNativeUtf8().cast<Char>()); _ptr, skin.nativePtr.cast(), name.toNativeUtf8().cast<Char>());
return PointAttachment.fromPointer(result); return result.address == 0 ? null : PointAttachment.fromPointer(result);
} }
@override @override
ClippingAttachment newClippingAttachment(Skin skin, String name) { ClippingAttachment? newClippingAttachment(Skin skin, String name) {
final result = SpineBindings.bindings.spine_atlas_attachment_loader_new_clipping_attachment( final result = SpineBindings.bindings.spine_atlas_attachment_loader_new_clipping_attachment(
_ptr, skin.nativePtr.cast(), name.toNativeUtf8().cast<Char>()); _ptr, skin.nativePtr.cast(), name.toNativeUtf8().cast<Char>());
return ClippingAttachment.fromPointer(result); return result.address == 0 ? null : ClippingAttachment.fromPointer(result);
} }
AtlasRegion findRegion(String name) { AtlasRegion? findRegion(String name) {
final result = final result =
SpineBindings.bindings.spine_atlas_attachment_loader_find_region(_ptr, name.toNativeUtf8().cast<Char>()); SpineBindings.bindings.spine_atlas_attachment_loader_find_region(_ptr, name.toNativeUtf8().cast<Char>());
return AtlasRegion.fromPointer(result); return result.address == 0 ? null : AtlasRegion.fromPointer(result);
} }
} }

View File

@ -154,7 +154,7 @@ class AtlasPage {
SpineBindings.bindings.spine_atlas_page_set_index(_ptr, value); SpineBindings.bindings.spine_atlas_page_set_index(_ptr, value);
} }
Pointer<Void> get texture { Pointer<Void>? get texture {
final result = SpineBindings.bindings.spine_atlas_page_get_texture(_ptr); final result = SpineBindings.bindings.spine_atlas_page_get_texture(_ptr);
return result; return result;
} }

View File

@ -57,9 +57,9 @@ class AtlasRegion extends TextureRegion {
SpineBindings.bindings.spine_atlas_region_dispose(_ptr); SpineBindings.bindings.spine_atlas_region_dispose(_ptr);
} }
AtlasPage get page { AtlasPage? get page {
final result = SpineBindings.bindings.spine_atlas_region_get_page(_ptr); final result = SpineBindings.bindings.spine_atlas_region_get_page(_ptr);
return AtlasPage.fromPointer(result); return result.address == 0 ? null : AtlasPage.fromPointer(result);
} }
String get name { String get name {
@ -137,8 +137,8 @@ class AtlasRegion extends TextureRegion {
return ArrayFloat.fromPointer(result); return ArrayFloat.fromPointer(result);
} }
set page(AtlasPage value) { set page(AtlasPage? value) {
SpineBindings.bindings.spine_atlas_region_set_page(_ptr, value.nativePtr.cast()); SpineBindings.bindings.spine_atlas_region_set_page(_ptr, value?.nativePtr.cast() ?? Pointer.fromAddress(0));
} }
set name(String value) { set name(String value) {

View File

@ -42,10 +42,10 @@ import 'skin.dart';
/// AttachmentLoader wrapper /// AttachmentLoader wrapper
abstract class AttachmentLoader { abstract class AttachmentLoader {
Pointer get nativePtr; Pointer get nativePtr;
RegionAttachment newRegionAttachment(Skin skin, String name, String path, Sequence sequence); RegionAttachment? newRegionAttachment(Skin skin, String name, String path, Sequence? sequence);
MeshAttachment newMeshAttachment(Skin skin, String name, String path, Sequence sequence); MeshAttachment? newMeshAttachment(Skin skin, String name, String path, Sequence? sequence);
BoundingBoxAttachment newBoundingBoxAttachment(Skin skin, String name); BoundingBoxAttachment? newBoundingBoxAttachment(Skin skin, String name);
PathAttachment newPathAttachment(Skin skin, String name); PathAttachment? newPathAttachment(Skin skin, String name);
PointAttachment newPointAttachment(Skin skin, String name); PointAttachment? newPointAttachment(Skin skin, String name);
ClippingAttachment newClippingAttachment(Skin skin, String name); ClippingAttachment? newClippingAttachment(Skin skin, String name);
} }

View File

@ -53,13 +53,15 @@ class Bone extends PosedActive implements Posed, Update {
@override @override
Pointer get nativePtr => _ptr; Pointer get nativePtr => _ptr;
factory Bone(BoneData data, Bone parent) { factory Bone(BoneData data, Bone? parent) {
final ptr = SpineBindings.bindings.spine_bone_create(data.nativePtr.cast(), parent.nativePtr.cast()); final ptr = SpineBindings.bindings
.spine_bone_create(data.nativePtr.cast(), parent?.nativePtr.cast() ?? Pointer.fromAddress(0));
return Bone.fromPointer(ptr); return Bone.fromPointer(ptr);
} }
factory Bone.from(Bone bone, Bone parent) { factory Bone.from(Bone bone, Bone? parent) {
final ptr = SpineBindings.bindings.spine_bone_create2(bone.nativePtr.cast(), parent.nativePtr.cast()); final ptr = SpineBindings.bindings
.spine_bone_create2(bone.nativePtr.cast(), parent?.nativePtr.cast() ?? Pointer.fromAddress(0));
return Bone.fromPointer(ptr); return Bone.fromPointer(ptr);
} }
@ -74,9 +76,9 @@ class Bone extends PosedActive implements Posed, Update {
return Rtti.fromPointer(result); return Rtti.fromPointer(result);
} }
Bone get parent { Bone? get parent {
final result = SpineBindings.bindings.spine_bone_get_parent(_ptr); final result = SpineBindings.bindings.spine_bone_get_parent(_ptr);
return Bone.fromPointer(result); return result.address == 0 ? null : Bone.fromPointer(result);
} }
ArrayBone get children { ArrayBone get children {

View File

@ -47,9 +47,9 @@ class BoneData extends PosedData {
@override @override
Pointer get nativePtr => _ptr; Pointer get nativePtr => _ptr;
factory BoneData(int index, String name, BoneData parent) { factory BoneData(int index, String name, BoneData? parent) {
final ptr = final ptr = SpineBindings.bindings.spine_bone_data_create(
SpineBindings.bindings.spine_bone_data_create(index, name.toNativeUtf8().cast<Char>(), parent.nativePtr.cast()); index, name.toNativeUtf8().cast<Char>(), parent?.nativePtr.cast() ?? Pointer.fromAddress(0));
return BoneData.fromPointer(ptr); return BoneData.fromPointer(ptr);
} }
@ -63,9 +63,9 @@ class BoneData extends PosedData {
return result; return result;
} }
BoneData get parent { BoneData? get parent {
final result = SpineBindings.bindings.spine_bone_data_get_parent(_ptr); final result = SpineBindings.bindings.spine_bone_data_get_parent(_ptr);
return BoneData.fromPointer(result); return result.address == 0 ? null : BoneData.fromPointer(result);
} }
double get length { double get length {

View File

@ -56,13 +56,14 @@ class ClippingAttachment extends VertexAttachment {
SpineBindings.bindings.spine_clipping_attachment_dispose(_ptr); SpineBindings.bindings.spine_clipping_attachment_dispose(_ptr);
} }
SlotData get endSlot { SlotData? get endSlot {
final result = SpineBindings.bindings.spine_clipping_attachment_get_end_slot(_ptr); final result = SpineBindings.bindings.spine_clipping_attachment_get_end_slot(_ptr);
return SlotData.fromPointer(result); return result.address == 0 ? null : SlotData.fromPointer(result);
} }
set endSlot(SlotData value) { set endSlot(SlotData? value) {
SpineBindings.bindings.spine_clipping_attachment_set_end_slot(_ptr, value.nativePtr.cast()); SpineBindings.bindings
.spine_clipping_attachment_set_end_slot(_ptr, value?.nativePtr.cast() ?? Pointer.fromAddress(0));
} }
Color get color { Color get color {

View File

@ -54,7 +54,8 @@ class DrawOrderTimeline extends Timeline {
SpineBindings.bindings.spine_draw_order_timeline_dispose(_ptr); SpineBindings.bindings.spine_draw_order_timeline_dispose(_ptr);
} }
void setFrame(int frame, double time, ArrayInt drawOrder) { void setFrame(int frame, double time, ArrayInt? drawOrder) {
SpineBindings.bindings.spine_draw_order_timeline_set_frame(_ptr, frame, time, drawOrder.nativePtr.cast()); SpineBindings.bindings
.spine_draw_order_timeline_set_frame(_ptr, frame, time, drawOrder?.nativePtr.cast() ?? Pointer.fromAddress(0));
} }
} }

View File

@ -45,9 +45,9 @@ class EventQueueEntry {
/// Get the native pointer for FFI calls /// Get the native pointer for FFI calls
Pointer get nativePtr => _ptr; Pointer get nativePtr => _ptr;
factory EventQueueEntry(EventType eventType, TrackEntry trackEntry, Event event) { factory EventQueueEntry(EventType eventType, TrackEntry? trackEntry, Event? event) {
final ptr = SpineBindings.bindings final ptr = SpineBindings.bindings.spine_event_queue_entry_create(eventType.value,
.spine_event_queue_entry_create(eventType.value, trackEntry.nativePtr.cast(), event.nativePtr.cast()); trackEntry?.nativePtr.cast() ?? Pointer.fromAddress(0), event?.nativePtr.cast() ?? Pointer.fromAddress(0));
return EventQueueEntry.fromPointer(ptr); return EventQueueEntry.fromPointer(ptr);
} }
@ -64,21 +64,21 @@ class EventQueueEntry {
SpineBindings.bindings.spine_event_queue_entry_set__type(_ptr, value.value); SpineBindings.bindings.spine_event_queue_entry_set__type(_ptr, value.value);
} }
TrackEntry get entry { TrackEntry? get entry {
final result = SpineBindings.bindings.spine_event_queue_entry_get__entry(_ptr); final result = SpineBindings.bindings.spine_event_queue_entry_get__entry(_ptr);
return TrackEntry.fromPointer(result); return result.address == 0 ? null : TrackEntry.fromPointer(result);
} }
set entry(TrackEntry value) { set entry(TrackEntry? value) {
SpineBindings.bindings.spine_event_queue_entry_set__entry(_ptr, value.nativePtr.cast()); SpineBindings.bindings.spine_event_queue_entry_set__entry(_ptr, value?.nativePtr.cast() ?? Pointer.fromAddress(0));
} }
Event get event { Event? get event {
final result = SpineBindings.bindings.spine_event_queue_entry_get__event(_ptr); final result = SpineBindings.bindings.spine_event_queue_entry_get__event(_ptr);
return Event.fromPointer(result); return result.address == 0 ? null : Event.fromPointer(result);
} }
set event(Event value) { set event(Event? value) {
SpineBindings.bindings.spine_event_queue_entry_set__event(_ptr, value.nativePtr.cast()); SpineBindings.bindings.spine_event_queue_entry_set__event(_ptr, value?.nativePtr.cast() ?? Pointer.fromAddress(0));
} }
} }

View File

@ -63,12 +63,12 @@ abstract class FromProperty {
SpineBindings.bindings.spine_from_property_set__offset(_ptr, value); SpineBindings.bindings.spine_from_property_set__offset(_ptr, value);
} }
ArrayToProperty get to { ArrayToProperty? get to {
final result = SpineBindings.bindings.spine_from_property_get__to(_ptr); final result = SpineBindings.bindings.spine_from_property_get__to(_ptr);
return ArrayToProperty.fromPointer(result); return result.address == 0 ? null : ArrayToProperty.fromPointer(result);
} }
set to(ArrayToProperty value) { set to(ArrayToProperty? value) {
SpineBindings.bindings.spine_from_property_set__to(_ptr, value.nativePtr.cast()); SpineBindings.bindings.spine_from_property_set__to(_ptr, value?.nativePtr.cast() ?? Pointer.fromAddress(0));
} }
} }

View File

@ -108,31 +108,32 @@ class MeshAttachment extends VertexAttachment {
SpineBindings.bindings.spine_mesh_attachment_set_path(_ptr, value.toNativeUtf8().cast<Char>()); SpineBindings.bindings.spine_mesh_attachment_set_path(_ptr, value.toNativeUtf8().cast<Char>());
} }
TextureRegion get region { TextureRegion? get region {
final result = SpineBindings.bindings.spine_mesh_attachment_get_region(_ptr); final result = SpineBindings.bindings.spine_mesh_attachment_get_region(_ptr);
return TextureRegion.fromPointer(result); return result.address == 0 ? null : TextureRegion.fromPointer(result);
} }
set region(TextureRegion value) { set region(TextureRegion? value) {
SpineBindings.bindings.spine_mesh_attachment_set_region(_ptr, value.nativePtr.cast()); SpineBindings.bindings.spine_mesh_attachment_set_region(_ptr, value?.nativePtr.cast() ?? Pointer.fromAddress(0));
} }
Sequence get sequence { Sequence? get sequence {
final result = SpineBindings.bindings.spine_mesh_attachment_get_sequence(_ptr); final result = SpineBindings.bindings.spine_mesh_attachment_get_sequence(_ptr);
return Sequence.fromPointer(result); return result.address == 0 ? null : Sequence.fromPointer(result);
} }
set sequence(Sequence value) { set sequence(Sequence? value) {
SpineBindings.bindings.spine_mesh_attachment_set_sequence(_ptr, value.nativePtr.cast()); SpineBindings.bindings.spine_mesh_attachment_set_sequence(_ptr, value?.nativePtr.cast() ?? Pointer.fromAddress(0));
} }
MeshAttachment get parentMesh { MeshAttachment? get parentMesh {
final result = SpineBindings.bindings.spine_mesh_attachment_get_parent_mesh(_ptr); final result = SpineBindings.bindings.spine_mesh_attachment_get_parent_mesh(_ptr);
return MeshAttachment.fromPointer(result); return result.address == 0 ? null : MeshAttachment.fromPointer(result);
} }
set parentMesh(MeshAttachment value) { set parentMesh(MeshAttachment? value) {
SpineBindings.bindings.spine_mesh_attachment_set_parent_mesh(_ptr, value.nativePtr.cast()); SpineBindings.bindings
.spine_mesh_attachment_set_parent_mesh(_ptr, value?.nativePtr.cast() ?? Pointer.fromAddress(0));
} }
ArrayUnsignedShort get edges { ArrayUnsignedShort get edges {

View File

@ -140,22 +140,23 @@ class RegionAttachment extends Attachment {
SpineBindings.bindings.spine_region_attachment_set_path(_ptr, value.toNativeUtf8().cast<Char>()); SpineBindings.bindings.spine_region_attachment_set_path(_ptr, value.toNativeUtf8().cast<Char>());
} }
TextureRegion get region { TextureRegion? get region {
final result = SpineBindings.bindings.spine_region_attachment_get_region(_ptr); final result = SpineBindings.bindings.spine_region_attachment_get_region(_ptr);
return TextureRegion.fromPointer(result); return result.address == 0 ? null : TextureRegion.fromPointer(result);
} }
set region(TextureRegion value) { set region(TextureRegion? value) {
SpineBindings.bindings.spine_region_attachment_set_region(_ptr, value.nativePtr.cast()); SpineBindings.bindings.spine_region_attachment_set_region(_ptr, value?.nativePtr.cast() ?? Pointer.fromAddress(0));
} }
Sequence get sequence { Sequence? get sequence {
final result = SpineBindings.bindings.spine_region_attachment_get_sequence(_ptr); final result = SpineBindings.bindings.spine_region_attachment_get_sequence(_ptr);
return Sequence.fromPointer(result); return result.address == 0 ? null : Sequence.fromPointer(result);
} }
set sequence(Sequence value) { set sequence(Sequence? value) {
SpineBindings.bindings.spine_region_attachment_set_sequence(_ptr, value.nativePtr.cast()); SpineBindings.bindings
.spine_region_attachment_set_sequence(_ptr, value?.nativePtr.cast() ?? Pointer.fromAddress(0));
} }
ArrayFloat get offset { ArrayFloat get offset {

View File

@ -47,22 +47,22 @@ class RenderCommand {
SpineBindings.bindings.spine_render_command_dispose(_ptr); SpineBindings.bindings.spine_render_command_dispose(_ptr);
} }
Pointer<Float> get positions { Pointer<Float>? get positions {
final result = SpineBindings.bindings.spine_render_command_get_positions(_ptr); final result = SpineBindings.bindings.spine_render_command_get_positions(_ptr);
return result; return result;
} }
Pointer<Float> get uvs { Pointer<Float>? get uvs {
final result = SpineBindings.bindings.spine_render_command_get_uvs(_ptr); final result = SpineBindings.bindings.spine_render_command_get_uvs(_ptr);
return result; return result;
} }
Pointer<Uint32> get colors { Pointer<Uint32>? get colors {
final result = SpineBindings.bindings.spine_render_command_get_colors(_ptr); final result = SpineBindings.bindings.spine_render_command_get_colors(_ptr);
return result; return result;
} }
Pointer<Uint32> get darkColors { Pointer<Uint32>? get darkColors {
final result = SpineBindings.bindings.spine_render_command_get_dark_colors(_ptr); final result = SpineBindings.bindings.spine_render_command_get_dark_colors(_ptr);
return result; return result;
} }
@ -72,7 +72,7 @@ class RenderCommand {
return result; return result;
} }
Pointer<Uint16> get indices { Pointer<Uint16>? get indices {
final result = SpineBindings.bindings.spine_render_command_get_indices(_ptr); final result = SpineBindings.bindings.spine_render_command_get_indices(_ptr);
return result; return result;
} }
@ -87,13 +87,13 @@ class RenderCommand {
return BlendMode.fromValue(result); return BlendMode.fromValue(result);
} }
Pointer<Void> get texture { Pointer<Void>? get texture {
final result = SpineBindings.bindings.spine_render_command_get_texture(_ptr); final result = SpineBindings.bindings.spine_render_command_get_texture(_ptr);
return result; return result;
} }
RenderCommand get next { RenderCommand? get next {
final result = SpineBindings.bindings.spine_render_command_get_next(_ptr); final result = SpineBindings.bindings.spine_render_command_get_next(_ptr);
return RenderCommand.fromPointer(result); return result.address == 0 ? null : RenderCommand.fromPointer(result);
} }
} }

View File

@ -47,9 +47,9 @@ class Rtti {
SpineBindings.bindings.spine_rtti_dispose(_ptr); SpineBindings.bindings.spine_rtti_dispose(_ptr);
} }
String get className { String? get className {
final result = SpineBindings.bindings.spine_rtti_get_class_name(_ptr); final result = SpineBindings.bindings.spine_rtti_get_class_name(_ptr);
return result.cast<Utf8>().toDartString(); return result.address == 0 ? null : result.cast<Utf8>().toDartString();
} }
bool isExactly(Rtti rtti) { bool isExactly(Rtti rtti) {

View File

@ -60,8 +60,9 @@ class Sequence {
return Sequence.fromPointer(result); return Sequence.fromPointer(result);
} }
void apply(SlotPose slot, Attachment attachment) { void apply(SlotPose? slot, Attachment? attachment) {
SpineBindings.bindings.spine_sequence_apply(_ptr, slot.nativePtr.cast(), attachment.nativePtr.cast()); SpineBindings.bindings.spine_sequence_apply(
_ptr, slot?.nativePtr.cast() ?? Pointer.fromAddress(0), attachment?.nativePtr.cast() ?? Pointer.fromAddress(0));
} }
String getPath(String basePath, int index) { String getPath(String basePath, int index) {

View File

@ -79,8 +79,8 @@ class Skeleton {
SpineBindings.bindings.spine_skeleton_constrained(_ptr, object.nativePtr.cast()); SpineBindings.bindings.spine_skeleton_constrained(_ptr, object.nativePtr.cast());
} }
void sortBone(Bone bone) { void sortBone(Bone? bone) {
SpineBindings.bindings.spine_skeleton_sort_bone(_ptr, bone.nativePtr.cast()); SpineBindings.bindings.spine_skeleton_sort_bone(_ptr, bone?.nativePtr.cast() ?? Pointer.fromAddress(0));
} }
static void sortReset(ArrayBone bones) { static void sortReset(ArrayBone bones) {
@ -118,14 +118,14 @@ class Skeleton {
return ArrayUpdate.fromPointer(result); return ArrayUpdate.fromPointer(result);
} }
Bone get rootBone { Bone? get rootBone {
final result = SpineBindings.bindings.spine_skeleton_get_root_bone(_ptr); final result = SpineBindings.bindings.spine_skeleton_get_root_bone(_ptr);
return Bone.fromPointer(result); return result.address == 0 ? null : Bone.fromPointer(result);
} }
Bone findBone(String boneName) { Bone? findBone(String boneName) {
final result = SpineBindings.bindings.spine_skeleton_find_bone(_ptr, boneName.toNativeUtf8().cast<Char>()); final result = SpineBindings.bindings.spine_skeleton_find_bone(_ptr, boneName.toNativeUtf8().cast<Char>());
return Bone.fromPointer(result); return result.address == 0 ? null : Bone.fromPointer(result);
} }
ArraySlot get slots { ArraySlot get slots {
@ -133,9 +133,9 @@ class Skeleton {
return ArraySlot.fromPointer(result); return ArraySlot.fromPointer(result);
} }
Slot findSlot(String slotName) { Slot? findSlot(String slotName) {
final result = SpineBindings.bindings.spine_skeleton_find_slot(_ptr, slotName.toNativeUtf8().cast<Char>()); final result = SpineBindings.bindings.spine_skeleton_find_slot(_ptr, slotName.toNativeUtf8().cast<Char>());
return Slot.fromPointer(result); return result.address == 0 ? null : Slot.fromPointer(result);
} }
ArraySlot get drawOrder { ArraySlot get drawOrder {
@ -143,9 +143,9 @@ class Skeleton {
return ArraySlot.fromPointer(result); return ArraySlot.fromPointer(result);
} }
Skin get skin { Skin? get skin {
final result = SpineBindings.bindings.spine_skeleton_get_skin(_ptr); final result = SpineBindings.bindings.spine_skeleton_get_skin(_ptr);
return Skin.fromPointer(result); return result.address == 0 ? null : Skin.fromPointer(result);
} }
void setAttachment(String slotName, String attachmentName) { void setAttachment(String slotName, String attachmentName) {
@ -273,13 +273,14 @@ class Skeleton {
SpineBindings.bindings.spine_skeleton_set_skin_1(_ptr, skinName.toNativeUtf8().cast<Char>()); SpineBindings.bindings.spine_skeleton_set_skin_1(_ptr, skinName.toNativeUtf8().cast<Char>());
} }
void setSkin2(Skin newSkin) { void setSkin2(Skin? newSkin) {
SpineBindings.bindings.spine_skeleton_set_skin_2(_ptr, newSkin.nativePtr.cast()); SpineBindings.bindings.spine_skeleton_set_skin_2(_ptr, newSkin?.nativePtr.cast() ?? Pointer.fromAddress(0));
} }
Attachment getAttachment(String slotName, String attachmentName) { Attachment? getAttachment(String slotName, String attachmentName) {
final result = SpineBindings.bindings.spine_skeleton_get_attachment_1( final result = SpineBindings.bindings.spine_skeleton_get_attachment_1(
_ptr, slotName.toNativeUtf8().cast<Char>(), attachmentName.toNativeUtf8().cast<Char>()); _ptr, slotName.toNativeUtf8().cast<Char>(), attachmentName.toNativeUtf8().cast<Char>());
if (result.address == 0) return null;
final rtti = SpineBindings.bindings.spine_attachment_get_rtti(result); final rtti = SpineBindings.bindings.spine_attachment_get_rtti(result);
final className = SpineBindings.bindings.spine_rtti_get_class_name(rtti).cast<Utf8>().toDartString(); final className = SpineBindings.bindings.spine_rtti_get_class_name(rtti).cast<Utf8>().toDartString();
switch (className) { switch (className) {
@ -300,9 +301,10 @@ class Skeleton {
} }
} }
Attachment getAttachment2(int slotIndex, String attachmentName) { Attachment? getAttachment2(int slotIndex, String attachmentName) {
final result = SpineBindings.bindings final result = SpineBindings.bindings
.spine_skeleton_get_attachment_2(_ptr, slotIndex, attachmentName.toNativeUtf8().cast<Char>()); .spine_skeleton_get_attachment_2(_ptr, slotIndex, attachmentName.toNativeUtf8().cast<Char>());
if (result.address == 0) return null;
final rtti = SpineBindings.bindings.spine_attachment_get_rtti(result); final rtti = SpineBindings.bindings.spine_attachment_get_rtti(result);
final className = SpineBindings.bindings.spine_rtti_get_class_name(rtti).cast<Utf8>().toDartString(); final className = SpineBindings.bindings.spine_rtti_get_class_name(rtti).cast<Utf8>().toDartString();
switch (className) { switch (className) {

View File

@ -60,10 +60,10 @@ class SkeletonBinary {
SpineBindings.bindings.spine_skeleton_binary_dispose(_ptr); SpineBindings.bindings.spine_skeleton_binary_dispose(_ptr);
} }
SkeletonData readSkeletonDataFile(String path) { SkeletonData? readSkeletonDataFile(String path) {
final result = final result =
SpineBindings.bindings.spine_skeleton_binary_read_skeleton_data_file(_ptr, path.toNativeUtf8().cast<Char>()); SpineBindings.bindings.spine_skeleton_binary_read_skeleton_data_file(_ptr, path.toNativeUtf8().cast<Char>());
return SkeletonData.fromPointer(result); return result.address == 0 ? null : SkeletonData.fromPointer(result);
} }
set scale(double value) { set scale(double value) {

View File

@ -74,14 +74,16 @@ class SkeletonBounds {
return result; return result;
} }
Polygon getPolygon(BoundingBoxAttachment attachment) { Polygon? getPolygon(BoundingBoxAttachment? attachment) {
final result = SpineBindings.bindings.spine_skeleton_bounds_get_polygon(_ptr, attachment.nativePtr.cast()); final result = SpineBindings.bindings
return Polygon.fromPointer(result); .spine_skeleton_bounds_get_polygon(_ptr, attachment?.nativePtr.cast() ?? Pointer.fromAddress(0));
return result.address == 0 ? null : Polygon.fromPointer(result);
} }
BoundingBoxAttachment getBoundingBox(Polygon polygon) { BoundingBoxAttachment? getBoundingBox(Polygon? polygon) {
final result = SpineBindings.bindings.spine_skeleton_bounds_get_bounding_box(_ptr, polygon.nativePtr.cast()); final result = SpineBindings.bindings
return BoundingBoxAttachment.fromPointer(result); .spine_skeleton_bounds_get_bounding_box(_ptr, polygon?.nativePtr.cast() ?? Pointer.fromAddress(0));
return result.address == 0 ? null : BoundingBoxAttachment.fromPointer(result);
} }
ArrayPolygon get polygons { ArrayPolygon get polygons {
@ -129,14 +131,14 @@ class SkeletonBounds {
return result; return result;
} }
BoundingBoxAttachment containsPoint2(double x, double y) { BoundingBoxAttachment? containsPoint2(double x, double y) {
final result = SpineBindings.bindings.spine_skeleton_bounds_contains_point_2(_ptr, x, y); final result = SpineBindings.bindings.spine_skeleton_bounds_contains_point_2(_ptr, x, y);
return BoundingBoxAttachment.fromPointer(result); return result.address == 0 ? null : BoundingBoxAttachment.fromPointer(result);
} }
BoundingBoxAttachment intersectsSegment(double x1, double y1, double x2, double y2) { BoundingBoxAttachment? intersectsSegment(double x1, double y1, double x2, double y2) {
final result = SpineBindings.bindings.spine_skeleton_bounds_intersects_segment_1(_ptr, x1, y1, x2, y2); final result = SpineBindings.bindings.spine_skeleton_bounds_intersects_segment_1(_ptr, x1, y1, x2, y2);
return BoundingBoxAttachment.fromPointer(result); return result.address == 0 ? null : BoundingBoxAttachment.fromPointer(result);
} }
bool intersectsSegment2(Polygon polygon, double x1, double y1, double x2, double y2) { bool intersectsSegment2(Polygon polygon, double x1, double y1, double x2, double y2) {

View File

@ -55,9 +55,9 @@ class SkeletonClipping {
SpineBindings.bindings.spine_skeleton_clipping_dispose(_ptr); SpineBindings.bindings.spine_skeleton_clipping_dispose(_ptr);
} }
int clipStart(Skeleton skeleton, Slot slot, ClippingAttachment clip) { int clipStart(Skeleton skeleton, Slot slot, ClippingAttachment? clip) {
final result = SpineBindings.bindings.spine_skeleton_clipping_clip_start( final result = SpineBindings.bindings.spine_skeleton_clipping_clip_start(
_ptr, skeleton.nativePtr.cast(), slot.nativePtr.cast(), clip.nativePtr.cast()); _ptr, skeleton.nativePtr.cast(), slot.nativePtr.cast(), clip?.nativePtr.cast() ?? Pointer.fromAddress(0));
return result; return result;
} }

View File

@ -58,31 +58,31 @@ class SkeletonData {
SpineBindings.bindings.spine_skeleton_data_dispose(_ptr); SpineBindings.bindings.spine_skeleton_data_dispose(_ptr);
} }
BoneData findBone(String boneName) { BoneData? findBone(String boneName) {
final result = SpineBindings.bindings.spine_skeleton_data_find_bone(_ptr, boneName.toNativeUtf8().cast<Char>()); final result = SpineBindings.bindings.spine_skeleton_data_find_bone(_ptr, boneName.toNativeUtf8().cast<Char>());
return BoneData.fromPointer(result); return result.address == 0 ? null : BoneData.fromPointer(result);
} }
SlotData findSlot(String slotName) { SlotData? findSlot(String slotName) {
final result = SpineBindings.bindings.spine_skeleton_data_find_slot(_ptr, slotName.toNativeUtf8().cast<Char>()); final result = SpineBindings.bindings.spine_skeleton_data_find_slot(_ptr, slotName.toNativeUtf8().cast<Char>());
return SlotData.fromPointer(result); return result.address == 0 ? null : SlotData.fromPointer(result);
} }
Skin findSkin(String skinName) { Skin? findSkin(String skinName) {
final result = SpineBindings.bindings.spine_skeleton_data_find_skin(_ptr, skinName.toNativeUtf8().cast<Char>()); final result = SpineBindings.bindings.spine_skeleton_data_find_skin(_ptr, skinName.toNativeUtf8().cast<Char>());
return Skin.fromPointer(result); return result.address == 0 ? null : Skin.fromPointer(result);
} }
EventData findEvent(String eventDataName) { EventData? findEvent(String eventDataName) {
final result = final result =
SpineBindings.bindings.spine_skeleton_data_find_event(_ptr, eventDataName.toNativeUtf8().cast<Char>()); SpineBindings.bindings.spine_skeleton_data_find_event(_ptr, eventDataName.toNativeUtf8().cast<Char>());
return EventData.fromPointer(result); return result.address == 0 ? null : EventData.fromPointer(result);
} }
Animation findAnimation(String animationName) { Animation? findAnimation(String animationName) {
final result = final result =
SpineBindings.bindings.spine_skeleton_data_find_animation(_ptr, animationName.toNativeUtf8().cast<Char>()); SpineBindings.bindings.spine_skeleton_data_find_animation(_ptr, animationName.toNativeUtf8().cast<Char>());
return Animation.fromPointer(result); return result.address == 0 ? null : Animation.fromPointer(result);
} }
String get name { String get name {
@ -109,13 +109,14 @@ class SkeletonData {
return ArraySkin.fromPointer(result); return ArraySkin.fromPointer(result);
} }
Skin get defaultSkin { Skin? get defaultSkin {
final result = SpineBindings.bindings.spine_skeleton_data_get_default_skin(_ptr); final result = SpineBindings.bindings.spine_skeleton_data_get_default_skin(_ptr);
return Skin.fromPointer(result); return result.address == 0 ? null : Skin.fromPointer(result);
} }
set defaultSkin(Skin value) { set defaultSkin(Skin? value) {
SpineBindings.bindings.spine_skeleton_data_set_default_skin(_ptr, value.nativePtr.cast()); SpineBindings.bindings
.spine_skeleton_data_set_default_skin(_ptr, value?.nativePtr.cast() ?? Pointer.fromAddress(0));
} }
ArrayEventData get events { ArrayEventData get events {

View File

@ -60,16 +60,16 @@ class SkeletonJson {
SpineBindings.bindings.spine_skeleton_json_dispose(_ptr); SpineBindings.bindings.spine_skeleton_json_dispose(_ptr);
} }
SkeletonData readSkeletonDataFile(String path) { SkeletonData? readSkeletonDataFile(String path) {
final result = final result =
SpineBindings.bindings.spine_skeleton_json_read_skeleton_data_file(_ptr, path.toNativeUtf8().cast<Char>()); SpineBindings.bindings.spine_skeleton_json_read_skeleton_data_file(_ptr, path.toNativeUtf8().cast<Char>());
return SkeletonData.fromPointer(result); return result.address == 0 ? null : SkeletonData.fromPointer(result);
} }
SkeletonData readSkeletonData(String json) { SkeletonData? readSkeletonData(String json) {
final result = final result =
SpineBindings.bindings.spine_skeleton_json_read_skeleton_data(_ptr, json.toNativeUtf8().cast<Char>()); SpineBindings.bindings.spine_skeleton_json_read_skeleton_data(_ptr, json.toNativeUtf8().cast<Char>());
return SkeletonData.fromPointer(result); return result.address == 0 ? null : SkeletonData.fromPointer(result);
} }
set scale(double value) { set scale(double value) {

View File

@ -53,8 +53,8 @@ class SkeletonRenderer {
SpineBindings.bindings.spine_skeleton_renderer_dispose(_ptr); SpineBindings.bindings.spine_skeleton_renderer_dispose(_ptr);
} }
RenderCommand render(Skeleton skeleton) { RenderCommand? render(Skeleton skeleton) {
final result = SpineBindings.bindings.spine_skeleton_renderer_render(_ptr, skeleton.nativePtr.cast()); final result = SpineBindings.bindings.spine_skeleton_renderer_render(_ptr, skeleton.nativePtr.cast());
return RenderCommand.fromPointer(result); return result.address == 0 ? null : RenderCommand.fromPointer(result);
} }
} }

View File

@ -66,8 +66,9 @@ class Skin {
.spine_skin_set_attachment(_ptr, slotIndex, name.toNativeUtf8().cast<Char>(), attachment.nativePtr.cast()); .spine_skin_set_attachment(_ptr, slotIndex, name.toNativeUtf8().cast<Char>(), attachment.nativePtr.cast());
} }
Attachment getAttachment(int slotIndex, String name) { Attachment? getAttachment(int slotIndex, String name) {
final result = SpineBindings.bindings.spine_skin_get_attachment(_ptr, slotIndex, name.toNativeUtf8().cast<Char>()); final result = SpineBindings.bindings.spine_skin_get_attachment(_ptr, slotIndex, name.toNativeUtf8().cast<Char>());
if (result.address == 0) return null;
final rtti = SpineBindings.bindings.spine_attachment_get_rtti(result); final rtti = SpineBindings.bindings.spine_attachment_get_rtti(result);
final className = SpineBindings.bindings.spine_rtti_get_class_name(rtti).cast<Utf8>().toDartString(); final className = SpineBindings.bindings.spine_rtti_get_class_name(rtti).cast<Utf8>().toDartString();
switch (className) { switch (className) {

View File

@ -128,17 +128,18 @@ class SliderData extends PosedData implements ConstraintData {
SpineBindings.bindings.spine_slider_data_set_loop(_ptr, value); SpineBindings.bindings.spine_slider_data_set_loop(_ptr, value);
} }
BoneData get bone { BoneData? get bone {
final result = SpineBindings.bindings.spine_slider_data_get_bone(_ptr); final result = SpineBindings.bindings.spine_slider_data_get_bone(_ptr);
return BoneData.fromPointer(result); return result.address == 0 ? null : BoneData.fromPointer(result);
} }
set bone(BoneData value) { set bone(BoneData? value) {
SpineBindings.bindings.spine_slider_data_set_bone(_ptr, value.nativePtr.cast()); SpineBindings.bindings.spine_slider_data_set_bone(_ptr, value?.nativePtr.cast() ?? Pointer.fromAddress(0));
} }
FromProperty get property { FromProperty? get property {
final result = SpineBindings.bindings.spine_slider_data_get_property(_ptr); final result = SpineBindings.bindings.spine_slider_data_get_property(_ptr);
if (result.address == 0) return null;
final rtti = SpineBindings.bindings.spine_from_property_get_rtti(result); final rtti = SpineBindings.bindings.spine_from_property_get_rtti(result);
final className = SpineBindings.bindings.spine_rtti_get_class_name(rtti).cast<Utf8>().toDartString(); final className = SpineBindings.bindings.spine_rtti_get_class_name(rtti).cast<Utf8>().toDartString();
switch (className) { switch (className) {
@ -159,8 +160,8 @@ class SliderData extends PosedData implements ConstraintData {
} }
} }
set property(FromProperty value) { set property(FromProperty? value) {
SpineBindings.bindings.spine_slider_data_set_property(_ptr, value.nativePtr.cast()); SpineBindings.bindings.spine_slider_data_set_property(_ptr, value?.nativePtr.cast() ?? Pointer.fromAddress(0));
} }
double get scale { double get scale {

View File

@ -84,8 +84,9 @@ class SlotPose {
SpineBindings.bindings.spine_slot_pose_set_has_dark_color(_ptr, value); SpineBindings.bindings.spine_slot_pose_set_has_dark_color(_ptr, value);
} }
Attachment get attachment { Attachment? get attachment {
final result = SpineBindings.bindings.spine_slot_pose_get_attachment(_ptr); final result = SpineBindings.bindings.spine_slot_pose_get_attachment(_ptr);
if (result.address == 0) return null;
final rtti = SpineBindings.bindings.spine_attachment_get_rtti(result); final rtti = SpineBindings.bindings.spine_attachment_get_rtti(result);
final className = SpineBindings.bindings.spine_rtti_get_class_name(rtti).cast<Utf8>().toDartString(); final className = SpineBindings.bindings.spine_rtti_get_class_name(rtti).cast<Utf8>().toDartString();
switch (className) { switch (className) {
@ -106,8 +107,8 @@ class SlotPose {
} }
} }
set attachment(Attachment value) { set attachment(Attachment? value) {
SpineBindings.bindings.spine_slot_pose_set_attachment(_ptr, value.nativePtr.cast()); SpineBindings.bindings.spine_slot_pose_set_attachment(_ptr, value?.nativePtr.cast() ?? Pointer.fromAddress(0));
} }
int get sequenceIndex { int get sequenceIndex {

View File

@ -52,10 +52,10 @@ abstract class Timeline {
return Rtti.fromPointer(result); return Rtti.fromPointer(result);
} }
void apply(Skeleton skeleton, double lastTime, double time, ArrayEvent pEvents, double alpha, MixBlend blend, void apply(Skeleton skeleton, double lastTime, double time, ArrayEvent? pEvents, double alpha, MixBlend blend,
MixDirection direction, bool appliedPose) { MixDirection direction, bool appliedPose) {
SpineBindings.bindings.spine_timeline_apply(_ptr, skeleton.nativePtr.cast(), lastTime, time, SpineBindings.bindings.spine_timeline_apply(_ptr, skeleton.nativePtr.cast(), lastTime, time,
pEvents.nativePtr.cast(), alpha, blend.value, direction.value, appliedPose); pEvents?.nativePtr.cast() ?? Pointer.fromAddress(0), alpha, blend.value, direction.value, appliedPose);
} }
int get frameEntries { int get frameEntries {

View File

@ -67,9 +67,9 @@ class TrackEntry {
SpineBindings.bindings.spine_track_entry_set_animation(_ptr, value.nativePtr.cast()); SpineBindings.bindings.spine_track_entry_set_animation(_ptr, value.nativePtr.cast());
} }
TrackEntry get previous { TrackEntry? get previous {
final result = SpineBindings.bindings.spine_track_entry_get_previous(_ptr); final result = SpineBindings.bindings.spine_track_entry_get_previous(_ptr);
return TrackEntry.fromPointer(result); return result.address == 0 ? null : TrackEntry.fromPointer(result);
} }
bool get loop { bool get loop {
@ -221,9 +221,9 @@ class TrackEntry {
SpineBindings.bindings.spine_track_entry_set_mix_draw_order_threshold(_ptr, value); SpineBindings.bindings.spine_track_entry_set_mix_draw_order_threshold(_ptr, value);
} }
TrackEntry get next { TrackEntry? get next {
final result = SpineBindings.bindings.spine_track_entry_get_next(_ptr); final result = SpineBindings.bindings.spine_track_entry_get_next(_ptr);
return TrackEntry.fromPointer(result); return result.address == 0 ? null : TrackEntry.fromPointer(result);
} }
bool get isComplete { bool get isComplete {
@ -254,14 +254,14 @@ class TrackEntry {
SpineBindings.bindings.spine_track_entry_set_mix_blend(_ptr, value.value); SpineBindings.bindings.spine_track_entry_set_mix_blend(_ptr, value.value);
} }
TrackEntry get mixingFrom { TrackEntry? get mixingFrom {
final result = SpineBindings.bindings.spine_track_entry_get_mixing_from(_ptr); final result = SpineBindings.bindings.spine_track_entry_get_mixing_from(_ptr);
return TrackEntry.fromPointer(result); return result.address == 0 ? null : TrackEntry.fromPointer(result);
} }
TrackEntry get mixingTo { TrackEntry? get mixingTo {
final result = SpineBindings.bindings.spine_track_entry_get_mixing_to(_ptr); final result = SpineBindings.bindings.spine_track_entry_get_mixing_to(_ptr);
return TrackEntry.fromPointer(result); return result.address == 0 ? null : TrackEntry.fromPointer(result);
} }
void resetRotationDirections() { void resetRotationDirections() {
@ -288,7 +288,7 @@ class TrackEntry {
return result; return result;
} }
Pointer<Void> get rendererObject { Pointer<Void>? get rendererObject {
final result = SpineBindings.bindings.spine_track_entry_get_renderer_object(_ptr); final result = SpineBindings.bindings.spine_track_entry_get_renderer_object(_ptr);
return result; return result;
} }

View File

@ -86,8 +86,9 @@ abstract class VertexAttachment extends Attachment {
SpineBindings.bindings.spine_vertex_attachment_set_world_vertices_length(_ptr, value); SpineBindings.bindings.spine_vertex_attachment_set_world_vertices_length(_ptr, value);
} }
Attachment get timelineAttachment { Attachment? get timelineAttachment {
final result = SpineBindings.bindings.spine_vertex_attachment_get_timeline_attachment(_ptr); final result = SpineBindings.bindings.spine_vertex_attachment_get_timeline_attachment(_ptr);
if (result.address == 0) return null;
final rtti = SpineBindings.bindings.spine_attachment_get_rtti(result); final rtti = SpineBindings.bindings.spine_attachment_get_rtti(result);
final className = SpineBindings.bindings.spine_rtti_get_class_name(rtti).cast<Utf8>().toDartString(); final className = SpineBindings.bindings.spine_rtti_get_class_name(rtti).cast<Utf8>().toDartString();
switch (className) { switch (className) {
@ -108,8 +109,9 @@ abstract class VertexAttachment extends Attachment {
} }
} }
set timelineAttachment(Attachment value) { set timelineAttachment(Attachment? value) {
SpineBindings.bindings.spine_vertex_attachment_set_timeline_attachment(_ptr, value.nativePtr.cast()); SpineBindings.bindings
.spine_vertex_attachment_set_timeline_attachment(_ptr, value?.nativePtr.cast() ?? Pointer.fromAddress(0));
} }
void copyTo(VertexAttachment other) { void copyTo(VertexAttachment other) {