From c9d7e687a96eaa7eb9bdbabfdc733aa5edaf656a Mon Sep 17 00:00:00 2001 From: Mario Zechner Date: Thu, 31 Jul 2025 00:15:57 +0200 Subject: [PATCH] [flutter] clean-up of ffi related code --- spine-flutter/codegen/src/dart-writer.ts | 13 +- spine-flutter/codegen/src/index.ts | 6 +- spine-flutter/example/pubspec.lock | 8 + spine-flutter/generator.md | 911 ------------------ spine-flutter/lib/ffi_proxy.dart | 34 - spine-flutter/lib/ffi_utf8.dart | 87 -- .../lib/generated/alpha_timeline.dart | 2 +- spine-flutter/lib/generated/animation.dart | 3 +- .../lib/generated/animation_state.dart | 3 +- .../lib/generated/animation_state_data.dart | 3 +- spine-flutter/lib/generated/arrays.dart | 3 +- spine-flutter/lib/generated/atlas.dart | 3 +- .../generated/atlas_attachment_loader.dart | 3 +- spine-flutter/lib/generated/atlas_page.dart | 3 +- spine-flutter/lib/generated/atlas_region.dart | 3 +- spine-flutter/lib/generated/attachment.dart | 3 +- .../lib/generated/attachment_loader.dart | 2 +- .../lib/generated/attachment_timeline.dart | 3 +- spine-flutter/lib/generated/bone.dart | 2 +- spine-flutter/lib/generated/bone_data.dart | 3 +- spine-flutter/lib/generated/bone_local.dart | 2 +- spine-flutter/lib/generated/bone_pose.dart | 2 +- .../lib/generated/bone_timeline.dart | 2 +- .../lib/generated/bone_timeline1.dart | 2 +- .../lib/generated/bone_timeline2.dart | 2 +- .../generated/bounding_box_attachment.dart | 3 +- .../lib/generated/clipping_attachment.dart | 3 +- spine-flutter/lib/generated/color.dart | 3 +- spine-flutter/lib/generated/constraint.dart | 2 +- .../lib/generated/constraint_data.dart | 2 +- .../lib/generated/constraint_timeline.dart | 2 +- .../lib/generated/constraint_timeline1.dart | 2 +- .../lib/generated/curve_timeline.dart | 2 +- .../lib/generated/curve_timeline1.dart | 2 +- .../lib/generated/deform_timeline.dart | 3 +- .../lib/generated/draw_order_timeline.dart | 2 +- spine-flutter/lib/generated/event.dart | 3 +- spine-flutter/lib/generated/event_data.dart | 3 +- .../lib/generated/event_queue_entry.dart | 2 +- .../lib/generated/event_timeline.dart | 2 +- .../lib/generated/from_property.dart | 2 +- spine-flutter/lib/generated/from_rotate.dart | 2 +- spine-flutter/lib/generated/from_scale_x.dart | 2 +- spine-flutter/lib/generated/from_scale_y.dart | 2 +- spine-flutter/lib/generated/from_shear_y.dart | 2 +- spine-flutter/lib/generated/from_x.dart | 2 +- spine-flutter/lib/generated/from_y.dart | 2 +- .../lib/generated/ik_constraint.dart | 2 +- .../lib/generated/ik_constraint_data.dart | 3 +- .../lib/generated/ik_constraint_pose.dart | 2 +- .../lib/generated/ik_constraint_timeline.dart | 2 +- .../lib/generated/inherit_timeline.dart | 2 +- spine-flutter/lib/generated/linked_mesh.dart | 2 +- .../lib/generated/mesh_attachment.dart | 3 +- .../lib/generated/path_attachment.dart | 3 +- .../lib/generated/path_constraint.dart | 2 +- .../lib/generated/path_constraint_data.dart | 3 +- .../path_constraint_mix_timeline.dart | 2 +- .../lib/generated/path_constraint_pose.dart | 2 +- .../path_constraint_position_timeline.dart | 2 +- .../path_constraint_spacing_timeline.dart | 2 +- .../lib/generated/physics_constraint.dart | 2 +- .../physics_constraint_damping_timeline.dart | 2 +- .../generated/physics_constraint_data.dart | 3 +- .../physics_constraint_gravity_timeline.dart | 2 +- .../physics_constraint_inertia_timeline.dart | 2 +- .../physics_constraint_mass_timeline.dart | 2 +- .../physics_constraint_mix_timeline.dart | 2 +- .../generated/physics_constraint_pose.dart | 2 +- .../physics_constraint_reset_timeline.dart | 2 +- .../physics_constraint_strength_timeline.dart | 2 +- .../physics_constraint_timeline.dart | 2 +- .../physics_constraint_wind_timeline.dart | 2 +- .../lib/generated/point_attachment.dart | 3 +- spine-flutter/lib/generated/polygon.dart | 2 +- spine-flutter/lib/generated/posed.dart | 2 +- spine-flutter/lib/generated/posed_active.dart | 2 +- spine-flutter/lib/generated/posed_data.dart | 3 +- .../lib/generated/region_attachment.dart | 3 +- .../lib/generated/render_command.dart | 2 +- .../lib/generated/rgb2_timeline.dart | 2 +- spine-flutter/lib/generated/rgb_timeline.dart | 2 +- .../lib/generated/rgba2_timeline.dart | 2 +- .../lib/generated/rgba_timeline.dart | 2 +- .../lib/generated/rotate_timeline.dart | 2 +- spine-flutter/lib/generated/rtti.dart | 3 +- .../lib/generated/scale_timeline.dart | 2 +- .../lib/generated/scale_x_timeline.dart | 2 +- .../lib/generated/scale_y_timeline.dart | 2 +- spine-flutter/lib/generated/sequence.dart | 3 +- .../lib/generated/sequence_timeline.dart | 3 +- .../lib/generated/shear_timeline.dart | 2 +- .../lib/generated/shear_x_timeline.dart | 2 +- .../lib/generated/shear_y_timeline.dart | 2 +- spine-flutter/lib/generated/skeleton.dart | 3 +- .../lib/generated/skeleton_binary.dart | 3 +- .../lib/generated/skeleton_bounds.dart | 2 +- .../lib/generated/skeleton_clipping.dart | 2 +- .../lib/generated/skeleton_data.dart | 3 +- .../lib/generated/skeleton_json.dart | 3 +- .../lib/generated/skeleton_renderer.dart | 2 +- spine-flutter/lib/generated/skin.dart | 3 +- spine-flutter/lib/generated/slider.dart | 2 +- spine-flutter/lib/generated/slider_data.dart | 3 +- .../lib/generated/slider_mix_timeline.dart | 2 +- spine-flutter/lib/generated/slider_pose.dart | 2 +- .../lib/generated/slider_timeline.dart | 2 +- spine-flutter/lib/generated/slot.dart | 2 +- .../lib/generated/slot_curve_timeline.dart | 2 +- spine-flutter/lib/generated/slot_data.dart | 3 +- spine-flutter/lib/generated/slot_pose.dart | 3 +- .../lib/generated/slot_timeline.dart | 2 +- .../spine_dart_bindings_generated.dart | 2 +- .../lib/generated/texture_region.dart | 2 +- spine-flutter/lib/generated/timeline.dart | 2 +- spine-flutter/lib/generated/to_property.dart | 2 +- spine-flutter/lib/generated/to_rotate.dart | 2 +- spine-flutter/lib/generated/to_scale_x.dart | 2 +- spine-flutter/lib/generated/to_scale_y.dart | 2 +- spine-flutter/lib/generated/to_shear_y.dart | 2 +- spine-flutter/lib/generated/to_x.dart | 2 +- spine-flutter/lib/generated/to_y.dart | 2 +- spine-flutter/lib/generated/track_entry.dart | 2 +- .../lib/generated/transform_constraint.dart | 2 +- .../generated/transform_constraint_data.dart | 3 +- .../generated/transform_constraint_pose.dart | 2 +- .../transform_constraint_timeline.dart | 2 +- .../lib/generated/translate_timeline.dart | 2 +- .../lib/generated/translate_x_timeline.dart | 2 +- .../lib/generated/translate_y_timeline.dart | 2 +- spine-flutter/lib/generated/update.dart | 2 +- .../lib/generated/vertex_attachment.dart | 3 +- spine-flutter/lib/malloc_native.dart | 1 - spine-flutter/lib/malloc_web.dart | 13 - spine-flutter/lib/native_array.dart | 3 +- spine-flutter/lib/spine_dart.dart | 42 +- spine-flutter/lib/spine_dart_init.dart | 40 +- spine-flutter/lib/spine_dart_init_web.dart | 5 +- spine-flutter/lib/spine_flutter.dart | 3 +- spine-flutter/pubspec.yaml | 3 +- spine-flutter/test/pubspec.lock | 16 + 141 files changed, 245 insertions(+), 1230 deletions(-) delete mode 100644 spine-flutter/generator.md delete mode 100644 spine-flutter/lib/ffi_proxy.dart delete mode 100644 spine-flutter/lib/ffi_utf8.dart delete mode 100644 spine-flutter/lib/malloc_native.dart delete mode 100644 spine-flutter/lib/malloc_web.dart diff --git a/spine-flutter/codegen/src/dart-writer.ts b/spine-flutter/codegen/src/dart-writer.ts index e91d9461e..aeaad450e 100644 --- a/spine-flutter/codegen/src/dart-writer.ts +++ b/spine-flutter/codegen/src/dart-writer.ts @@ -502,7 +502,8 @@ export class DartWriter { const lines: string[] = []; lines.push(''); - lines.push("import '../ffi_proxy.dart';"); + lines.push("import 'package:universal_ffi/ffi.dart';"); + lines.push(`import 'package:universal_ffi/ffi_utils.dart';`); lines.push("import 'spine_dart_bindings_generated.dart';"); lines.push("import '../spine_bindings.dart';"); @@ -703,7 +704,8 @@ ${declaration} {`; lines.push(this.generateHeader()); lines.push(''); - lines.push("import '../ffi_proxy.dart';"); + lines.push(`import 'package:universal_ffi/ffi.dart';`); + lines.push(`import 'package:universal_ffi/ffi_utils.dart';`); lines.push("import 'spine_dart_bindings_generated.dart';"); lines.push("import '../spine_bindings.dart';"); lines.push("import '../native_array.dart';"); @@ -1608,13 +1610,10 @@ ${declaration} {`; lines.push(''); lines.push('// AUTO GENERATED FILE, DO NOT EDIT.'); lines.push(''); - lines.push('// ignore_for_file: type_argument_not_matching_bounds'); - lines.push(`import 'package:flutter/services.dart';`); - lines.push(`import 'package:wasm_ffi/ffi.dart';`); + lines.push(`import 'package:universal_ffi/ffi.dart';`); lines.push(''); lines.push(`import 'generated/spine_dart_bindings_generated.dart';`); lines.push(''); - lines.push('// Export this so malloc_web.dart can access it'); lines.push('DynamicLibrary? dylibInstance;'); lines.push(''); lines.push('class SpineDartFFI {'); @@ -1655,7 +1654,7 @@ ${declaration} {`; lines.push(` dylibInstance = await DynamicLibrary.open('assets/packages/spine_flutter/lib/assets/libspine_flutter.js');`); lines.push(''); lines.push(' // Now register all the opaque types'); - + // Sort and write all registerOpaqueType calls const sortedTypes = Array.from(wrapperTypes).sort(); for (const type of sortedTypes) { diff --git a/spine-flutter/codegen/src/index.ts b/spine-flutter/codegen/src/index.ts index 7363df2fa..7dcbc6e36 100644 --- a/spine-flutter/codegen/src/index.ts +++ b/spine-flutter/codegen/src/index.ts @@ -29,10 +29,10 @@ async function generateFFIBindings(spineCDir: string): Promise { throw new Error('Failed to generate bindings'); } - // Replace dart:ffi import with ffi_proxy.dart - console.log('Replacing dart:ffi import with ffi_proxy.dart...'); + // Replace dart:ffi import with universal_ffi + console.log('Replacing dart:ffi import with universal_ffi...'); let content = fs.readFileSync(bindingsPath, 'utf8'); - content = content.replace("import 'dart:ffi' as ffi;", "import '../ffi_proxy.dart' as ffi;"); + content = content.replace("import 'dart:ffi' as ffi;", "import 'package:universal_ffi/ffi.dart' as ffi;"); // For web_ffi compatibility, we need to convert wrapper structs to Opaque console.log('Converting wrapper structs to Opaque for web_ffi compatibility...'); diff --git a/spine-flutter/example/pubspec.lock b/spine-flutter/example/pubspec.lock index 69991c882..9b2c03247 100644 --- a/spine-flutter/example/pubspec.lock +++ b/spine-flutter/example/pubspec.lock @@ -194,6 +194,14 @@ packages: url: "https://pub.dev" source: hosted version: "1.3.2" + universal_ffi: + dependency: transitive + description: + name: universal_ffi + sha256: "8f0e28bab34709e94541ff8c39d86294b686a6cc112561dd2aa071d4a4179609" + url: "https://pub.dev" + source: hosted + version: "1.1.3" vector_math: dependency: transitive description: diff --git a/spine-flutter/generator.md b/spine-flutter/generator.md deleted file mode 100644 index a7df743b9..000000000 --- a/spine-flutter/generator.md +++ /dev/null @@ -1,911 +0,0 @@ -# Dart FFI Wrapper Generator - -## Overview - -A TypeScript-based code generator that extends the existing `spine-c/codegen` system to automatically generate clean, type-safe Dart wrapper classes over the raw FFI bindings. This eliminates the need for manual wrapper implementation while providing a native Dart API experience. - -## Architecture - -``` -spine-cpp (C++ source) - ↓ (existing type-extractor.ts) -spine-cpp-types.json (type definitions) - ↓ (existing ir-generator.ts + c-writer.ts) -spine-c (C bindings: .h/.c files) - ↓ (ffigen via generate_bindings.sh) -spine_flutter_bindings_generated.dart (raw FFI) - ↓ (NEW: dart-generator.ts) -spine_flutter.dart (clean Dart API) -``` - -## Key Insights - -### 1. Derivation vs Parsing -Instead of parsing the generated FFI bindings, we **derive** what ffigen produces using the same C type information that generates the headers. This works because ffigen follows predictable transformation rules: - -### 2. Predictable Disposal Pattern -All C types follow a consistent disposal pattern (`spine_type_name` → `spine_type_name_dispose`), so we can derive disposal function names automatically instead of storing them. - -### 3. Array Properties vs Regular Getters -C functions that return `spine_array_*` types become special **Array properties** in Dart, requiring different generation logic than primitive getters. - -### FFigen Transformation Rules - -| C Code | Generated Dart FFI | -|--------|-------------------| -| `SPINE_C_API float spine_animation_get_duration(spine_animation self);` | `double spine_animation_get_duration(Pointer self)` | -| `SPINE_C_API void spine_animation_dispose(spine_animation self);` | `void spine_animation_dispose(Pointer self)` | -| `typedef enum { BLEND_NORMAL, BLEND_ADDITIVE } spine_blend_mode;` | `enum spine_blend_mode { BLEND_NORMAL(0), BLEND_ADDITIVE(1) }` | -| `SPINE_OPAQUE_TYPE(spine_animation)` | `typedef struct spine_animation_wrapper { char _dummy; } spine_animation_wrapper; typedef spine_animation_wrapper *spine_animation;` | -| `spine_array_timeline spine_animation_get_timelines(spine_animation self);` | `Pointer spine_animation_get_timelines(Pointer self)` → **Array property** | - -## Generator Components - -### 1. Type Mapping System (`dart-types.ts`) - -Defines the structure for Dart wrapper types: - -```typescript -interface DartClass { - name: string; // "Animation" - cName: string; // "spine_animation" - nativeType: string; // "Pointer" - constructors: DartConstructor[]; - methods: DartMethod[]; - getters: DartGetter[]; - setters: DartSetter[]; - arrays: DartArrayGetter[]; // Properties that return Array (e.g., animation.timelines) -} - -interface DartMethod { - name: string; // "apply" - cFunctionName: string; // "spine_animation_apply" - returnType: DartType; - parameters: DartParameter[]; - isStatic?: boolean; -} - -interface DartGetter { - name: string; // "duration" - cFunctionName: string; // "spine_animation_get_duration" - returnType: DartType; -} - -interface DartSetter { - name: string; // "duration" - cFunctionName: string; // "spine_animation_set_duration" - parameterType: DartType; -} - -interface DartArrayGetter { - name: string; // "timelines" (Dart property name) - elementType: string; // "Timeline" (element type inside Array) - cArrayType: string; // "spine_array_timeline" (C array type returned) - cGetterName: string; // "spine_animation_get_timelines" (C function to call) -} - -interface DartConstructor { - cFunctionName: string; // "spine_animation_create" - parameters: DartParameter[]; -} - -interface DartParameter { - name: string; - type: DartType; - cType: string; // Original C type for conversion -} - -interface DartType { - dart: string; // "double", "String", "Animation" - isNullable?: boolean; - isNative?: boolean; // true for primitives, false for wrapper classes -} - -interface DartEnum { - name: string; // "BlendMode" - cName: string; // "spine_blend_mode" - values: DartEnumValue[]; -} - -interface DartEnumValue { - name: string; // "normal" - cName: string; // "SPINE_BLEND_MODE_NORMAL" - value: number; -} -``` - -### 2. Type Mapping Rules (`dart-type-mapper.ts`) - -Converts C types to Dart types: - -```typescript -class DartTypeMapper { - // Maps C types to Dart types - private static readonly TYPE_MAP: Record = { - 'float': { dart: 'double', isNative: true }, - 'double': { dart: 'double', isNative: true }, - 'int': { dart: 'int', isNative: true }, - 'bool': { dart: 'bool', isNative: true }, - 'char*': { dart: 'String', isNative: true }, - 'const char*': { dart: 'String', isNative: true }, - 'void': { dart: 'void', isNative: true }, - 'spine_skeleton': { dart: 'Skeleton', isNative: false }, - 'spine_animation': { dart: 'Animation', isNative: false }, - // ... more mappings - }; - - static mapCTypeToDart(cType: string): DartType { - // Handle pointers - if (cType.endsWith('*')) { - const baseType = cType.slice(0, -1).trim(); - const mapped = this.TYPE_MAP[baseType]; - return mapped ? { ...mapped, isNullable: true } : this.mapSpineType(baseType); - } - - // Handle direct mappings - return this.TYPE_MAP[cType] || this.mapSpineType(cType); - } - - private static mapSpineType(cType: string): DartType { - if (cType.startsWith('spine_')) { - // spine_animation -> Animation - const dartName = toPascalCase(cType.replace('spine_', '')); - return { dart: dartName, isNative: false }; - } - - // Default to dynamic for unknown types - return { dart: 'dynamic', isNative: false }; - } -} -``` - -### 3. Naming Convention Utilities (`dart-naming.ts`) - -Handles C to Dart naming conversions: - -```typescript -export function toPascalCase(snakeCase: string): string { - return snakeCase - .split('_') - .map(word => word.charAt(0).toUpperCase() + word.slice(1).toLowerCase()) - .join(''); -} - -export function toCamelCase(snakeCase: string): string { - const pascal = toPascalCase(snakeCase); - return pascal.charAt(0).toLowerCase() + pascal.slice(1); -} - -export function extractMethodName(cFunctionName: string, className: string): string { - // spine_animation_get_duration -> getDuration - // spine_animation_set_duration -> setDuration - // spine_animation_apply -> apply - - const prefix = `spine_${toSnakeCase(className)}_`; - if (!cFunctionName.startsWith(prefix)) { - throw new Error(`Function ${cFunctionName} doesn't match expected prefix ${prefix}`); - } - - const methodPart = cFunctionName.slice(prefix.length); - return toCamelCase(methodPart); -} - -export function isGetter(methodName: string): boolean { - return methodName.startsWith('get_'); -} - -export function isSetter(methodName: string): boolean { - return methodName.startsWith('set_'); -} - -export function extractPropertyName(methodName: string): string { - // get_duration -> duration - // set_duration -> duration - if (methodName.startsWith('get_') || methodName.startsWith('set_')) { - return methodName.slice(4); - } - return methodName; -} -``` - -### 4. Dart Code Generator (`dart-writer.ts`) - -Generates the actual Dart wrapper files: - -```typescript -export class DartWriter { - constructor(private outputDir: string, private bindingsImport: string) {} - - async writeClass(dartClass: DartClass): Promise { - const lines: string[] = []; - - // File header - lines.push("// AUTO GENERATED FILE, DO NOT EDIT."); - lines.push("// Generated by spine-c dart-wrapper generator"); - lines.push(""); - lines.push(`import '${this.bindingsImport}';`); - lines.push("import 'dart:ffi';"); - lines.push("import 'array.dart';"); - lines.push(""); - - // Class declaration - lines.push(`class ${dartClass.name} {`); - lines.push(` final ${dartClass.nativeType} _ptr;`); - lines.push(` final SpineFlutterBindings _bindings;`); - lines.push(""); - - // Private constructor - lines.push(` ${dartClass.name}._(this._ptr, this._bindings);`); - lines.push(""); - - // Public constructors - for (const constructor of dartClass.constructors) { - lines.push(this.writeConstructor(dartClass, constructor)); - lines.push(""); - } - - // Getters - for (const getter of dartClass.getters) { - lines.push(this.writeGetter(getter)); - } - - // Setters - for (const setter of dartClass.setters) { - lines.push(this.writeSetter(setter)); - } - - // Array getters - for (const arrayGetter of dartClass.arrays) { - lines.push(this.writeArrayGetter(arrayGetter)); - } - - // Methods - for (const method of dartClass.methods) { - lines.push(this.writeMethod(method)); - lines.push(""); - } - - // Disposal method (derived from class name) - lines.push(` void dispose() => _bindings.${dartClass.cName}_dispose(_ptr);`); - - lines.push("}"); - - // Write to file - const fileName = `${toSnakeCase(dartClass.name)}.dart`; - const filePath = path.join(this.outputDir, fileName); - await fs.writeFile(filePath, lines.join('\n')); - } - - private writeConstructor(dartClass: DartClass, constructor: DartConstructor): string { - const params = constructor.parameters.map(p => - `${p.type.dart} ${p.name}` - ).join(', '); - - const args = constructor.parameters.map(p => - this.convertDartToC(p.name, p.type, p.cType) - ).join(', '); - - return [ - ` factory ${dartClass.name}.create(SpineFlutterBindings bindings${params ? ', ' + params : ''}) {`, - ` final ptr = bindings.${constructor.cFunctionName}(${args});`, - ` return ${dartClass.name}._(ptr, bindings);`, - ` }` - ].join('\n'); - } - - private writeGetter(getter: DartGetter): string { - if (getter.returnType.isNative) { - return ` ${getter.returnType.dart} get ${getter.name} => _bindings.${getter.cFunctionName}(_ptr);`; - } else { - return [ - ` ${getter.returnType.dart} get ${getter.name} {`, - ` final ptr = _bindings.${getter.cFunctionName}(_ptr);`, - ` return ${getter.returnType.dart}._(ptr, _bindings);`, - ` }` - ].join('\n'); - } - } - - private writeSetter(setter: DartSetter): string { - const conversion = this.convertDartToC('value', setter.parameterType, ''); - return ` set ${setter.name}(${setter.parameterType.dart} value) => _bindings.${setter.cFunctionName}(_ptr, ${conversion});`; - } - - private writeArrayGetter(arrayGetter: DartArrayGetter): string { - return [ - ` Array<${arrayGetter.elementType}> get ${arrayGetter.name} {`, - ` final array = _bindings.${arrayGetter.cGetterName}(_ptr);`, - ` return Array.create<${arrayGetter.elementType}>(array, _bindings, ${arrayGetter.elementType}._);`, - ` }` - ].join('\n'); - } - - private writeMethod(method: DartMethod): string { - const params = method.parameters.map(p => - `${p.type.dart} ${p.name}` - ).join(', '); - - const args = ['_ptr', ...method.parameters.map(p => - this.convertDartToC(p.name, p.type, p.cType) - )].join(', '); - - if (method.returnType.dart === 'void') { - return [ - ` void ${method.name}(${params}) {`, - ` _bindings.${method.cFunctionName}(${args});`, - ` }` - ].join('\n'); - } else if (method.returnType.isNative) { - return [ - ` ${method.returnType.dart} ${method.name}(${params}) {`, - ` return _bindings.${method.cFunctionName}(${args});`, - ` }` - ].join('\n'); - } else { - return [ - ` ${method.returnType.dart} ${method.name}(${params}) {`, - ` final ptr = _bindings.${method.cFunctionName}(${args});`, - ` return ${method.returnType.dart}._(ptr, _bindings);`, - ` }` - ].join('\n'); - } - } - - private convertDartToC(dartValue: string, dartType: DartType, cType: string): string { - if (dartType.isNative) { - // Handle string conversion - if (dartType.dart === 'String') { - return `${dartValue}.toNativeUtf8().cast()`; - } - return dartValue; - } else { - // Wrapper class - extract the pointer - return `${dartValue}._ptr`; - } - } -} -``` - -### 5. Generic Array Implementation (`dart-array-writer.ts`) - -Generates a single reusable Array class: - -```typescript -export class DartArrayWriter { - async writeArrayClass(outputDir: string): Promise { - const content = ` -// AUTO GENERATED FILE, DO NOT EDIT. -// Generated by spine-c dart-wrapper generator - -import 'dart:collection'; -import 'dart:ffi'; -import 'spine_flutter_bindings_generated.dart'; - -class Array extends ListBase { - final Pointer _nativeArray; - final SpineFlutterBindings _bindings; - final T Function(Pointer) _elementFactory; - final String _arrayTypeName; - - Array._( - this._nativeArray, - this._bindings, - this._elementFactory, - this._arrayTypeName, - ); - - static Array create( - Pointer nativeArray, - SpineFlutterBindings bindings, - T Function(Pointer) elementFactory, - ) { - final typeName = T.toString().toLowerCase(); - return Array._(nativeArray, bindings, elementFactory, 'spine_array_\$typeName'); - } - - @override - int get length { - // Use dynamic function lookup based on type - switch (_arrayTypeName) { - case 'spine_array_timeline': - return _bindings.spine_array_timeline_get_size(_nativeArray.cast()); - case 'spine_array_bone_data': - return _bindings.spine_array_bone_data_get_size(_nativeArray.cast()); - case 'spine_array_slot_data': - return _bindings.spine_array_slot_data_get_size(_nativeArray.cast()); - // Add more cases as needed - default: - throw UnsupportedError('Unknown array type: \$_arrayTypeName'); - } - } - - @override - T operator [](int index) { - if (index < 0 || index >= length) { - throw RangeError.index(index, this); - } - - Pointer elementPtr; - switch (_arrayTypeName) { - case 'spine_array_timeline': - elementPtr = _bindings.spine_array_timeline_get(_nativeArray.cast(), index); - break; - case 'spine_array_bone_data': - elementPtr = _bindings.spine_array_bone_data_get(_nativeArray.cast(), index); - break; - case 'spine_array_slot_data': - elementPtr = _bindings.spine_array_slot_data_get(_nativeArray.cast(), index); - break; - // Add more cases as needed - default: - throw UnsupportedError('Unknown array type: \$_arrayTypeName'); - } - - return _elementFactory(elementPtr); - } - - @override - void operator []=(int index, T value) { - throw UnsupportedError('Array is read-only'); - } - - @override - set length(int newLength) { - throw UnsupportedError('Array is read-only'); - } -} -`; - - const filePath = path.join(outputDir, 'array.dart'); - await fs.writeFile(filePath, content.trim()); - } -} -``` - -### 6. Enum Generator (`dart-enum-writer.ts`) - -Generates Dart enum wrappers: - -```typescript -export class DartEnumWriter { - async writeEnum(dartEnum: DartEnum, outputDir: string): Promise { - const lines: string[] = []; - - // File header - lines.push("// AUTO GENERATED FILE, DO NOT EDIT."); - lines.push("// Generated by spine-c dart-wrapper generator"); - lines.push(""); - - // Enum declaration - lines.push(`enum ${dartEnum.name} {`); - - // Enum values - for (let i = 0; i < dartEnum.values.length; i++) { - const value = dartEnum.values[i]; - const comma = i < dartEnum.values.length - 1 ? ',' : ''; - lines.push(` ${value.name}(${value.value})${comma}`); - } - - lines.push(""); - lines.push(" const ${dartEnum.name}(this.value);"); - lines.push(" final int value;"); - lines.push(""); - - // From native conversion - lines.push(` static ${dartEnum.name} fromNative(int value) {`); - lines.push(" switch (value) {"); - for (const value of dartEnum.values) { - lines.push(` case ${value.value}: return ${dartEnum.name}.${value.name};`); - } - lines.push(` default: throw ArgumentError('Unknown ${dartEnum.name} value: \$value');`); - lines.push(" }"); - lines.push(" }"); - lines.push("}"); - - // Write to file - const fileName = `${toSnakeCase(dartEnum.name)}.dart`; - const filePath = path.join(outputDir, fileName); - await fs.writeFile(filePath, lines.join('\n')); - } -} -``` - -### 7. Main Generator Orchestrator (`dart-generator.ts`) - -Coordinates the entire generation process: - -```typescript -import { CClassOrStruct, CEnum, CArrayType } from './c-types'; -import { DartClass, DartEnum } from './dart-types'; -import { DartTypeMapper } from './dart-type-mapper'; -import { DartWriter } from './dart-writer'; -import { DartEnumWriter } from './dart-enum-writer'; -import { DartArrayWriter } from './dart-array-writer'; -import { extractMethodName, isGetter, isSetter, extractPropertyName } from './dart-naming'; - -export class DartGenerator { - private typeMapper = new DartTypeMapper(); - private writer: DartWriter; - private enumWriter = new DartEnumWriter(); - private arrayWriter = new DartArrayWriter(); - - constructor( - private cTypes: CClassOrStruct[], - private cEnums: CEnum[], - private cArrayTypes: CArrayType[], - private outputDir: string, - private bindingsImport: string = 'spine_flutter_bindings_generated.dart' - ) { - this.writer = new DartWriter(outputDir, bindingsImport); - } - - async generateAll(): Promise { - // Ensure output directory exists - await fs.mkdir(this.outputDir, { recursive: true }); - - console.log(`Generating ${this.cTypes.length} Dart wrapper classes...`); - - // Generate wrapper classes - for (const cType of this.cTypes) { - const dartClass = this.convertCTypeToDartClass(cType); - await this.writer.writeClass(dartClass); - console.log(`Generated: ${dartClass.name}`); - } - - console.log(`Generating ${this.cEnums.length} Dart enums...`); - - // Generate enums - for (const cEnum of this.cEnums) { - const dartEnum = this.convertCEnumToDartEnum(cEnum); - await this.enumWriter.writeEnum(dartEnum, this.outputDir); - console.log(`Generated enum: ${dartEnum.name}`); - } - - // Generate generic Array class - await this.arrayWriter.writeArrayClass(this.outputDir); - console.log('Generated: Array'); - - console.log('Dart wrapper generation complete!'); - } - - private convertCTypeToDartClass(cType: CClassOrStruct): DartClass { - const className = toPascalCase(cType.name.replace('spine_', '')); - - // Separate getters, setters, and regular methods - const getters: DartGetter[] = []; - const setters: DartSetter[] = []; - const methods: DartMethod[] = []; - const constructors: DartConstructor[] = []; - const arrays: DartArrayGetter[] = []; - - for (const method of cType.methods) { - const methodName = extractMethodName(method.name, cType.name); - - if (method.name.includes('_create')) { - // Constructor - constructors.push({ - cFunctionName: method.name, - parameters: method.parameters.slice(0, -1).map(p => ({ - name: p.name, - type: this.typeMapper.mapCTypeToDart(p.type), - cType: p.type - })) - }); - } else if (isGetter(methodName)) { - // Getter - const propertyName = extractPropertyName(methodName); - const returnType = this.typeMapper.mapCTypeToDart(method.returnType); - - // Check if this is an array getter - if (method.returnType.startsWith('spine_array_')) { - const elementType = this.extractArrayElementType(method.returnType); - arrays.push({ - name: propertyName, - elementType, - cArrayType: method.returnType, - cGetterName: method.name - }); - } else { - getters.push({ - name: propertyName, - cFunctionName: method.name, - returnType - }); - } - } else if (isSetter(methodName)) { - // Setter - const propertyName = extractPropertyName(methodName); - const paramType = this.typeMapper.mapCTypeToDart(method.parameters[1].type); - setters.push({ - name: propertyName, - cFunctionName: method.name, - parameterType: paramType - }); - } else { - // Regular method - methods.push({ - name: methodName, - cFunctionName: method.name, - returnType: this.typeMapper.mapCTypeToDart(method.returnType), - parameters: method.parameters.slice(1).map(p => ({ - name: p.name, - type: this.typeMapper.mapCTypeToDart(p.type), - cType: p.type - })) - }); - } - } - - return { - name: className, - cName: cType.name, - nativeType: `Pointer<${cType.name}_wrapper>`, - constructors, - methods, - getters, - setters, - arrays - }; - } - - private convertCEnumToDartEnum(cEnum: CEnum): DartEnum { - return { - name: toPascalCase(cEnum.name.replace('spine_', '')), - cName: cEnum.name, - values: cEnum.values.map(value => ({ - name: toCamelCase(value.name.replace(/^SPINE_.*?_/, '')), - cName: value.name, - value: value.value - })) - }; - } - - private extractArrayElementType(arrayType: string): string { - // spine_array_timeline -> Timeline - // spine_array_bone_data -> BoneData - const match = arrayType.match(/spine_array_(.+)/); - if (!match) throw new Error(`Invalid array type: ${arrayType}`); - - return toPascalCase(match[1]); - } -} -``` - -### 8. Integration with Existing Codegen (`index.ts` modifications) - -Extend the existing main function: - -```typescript -// Add to existing imports -import { DartGenerator } from './dart-generator'; - -// Add to existing main() function after C generation -async function main() { - // ... existing C generation code ... - - // Write all C files to disk - const cWriter = new CWriter(path.join(__dirname, '../../src/generated')); - await cWriter.writeAll(cTypes, cEnums, cArrayTypes); - - console.log('C code generation complete!'); - - // NEW: Generate Dart wrappers - const dartOutputDir = path.join(__dirname, '../../../lib/src/generated'); - const dartGenerator = new DartGenerator( - cTypes, - cEnums, - cArrayTypes, - dartOutputDir - ); - - await dartGenerator.generateAll(); - - console.log('All code generation complete!'); -} -``` - -## Generated Output Structure - -After running the generator, the output structure will be: - -``` -lib/ -├── spine_flutter.dart # Main export file -├── spine_flutter_bindings_generated.dart # Raw FFI bindings (from ffigen) -└── src/ - └── generated/ - ├── array.dart # Generic Array implementation - ├── animation.dart # Animation wrapper class - ├── skeleton.dart # Skeleton wrapper class - ├── bone_data.dart # BoneData wrapper class - ├── blend_mode.dart # BlendMode enum - └── ... # More generated classes and enums -``` - -## Usage Examples - -### Before (Manual FFI Usage) -```dart -// Raw FFI - error-prone and verbose -final skeletonDataPtr = bindings.spine_skeleton_data_create_from_file('skeleton.json'.toNativeUtf8().cast()); -final bonesArrayPtr = bindings.spine_skeleton_data_get_bones(skeletonDataPtr); -final numBones = bindings.spine_skeleton_data_get_num_bones(skeletonDataPtr); - -for (int i = 0; i < numBones; i++) { - final bonePtr = bindings.spine_array_bone_data_get(bonesArrayPtr, i); - final namePtr = bindings.spine_bone_data_get_name(bonePtr); - final name = namePtr.cast().toDartString(); - print('Bone: $name'); -} - -bindings.spine_skeleton_data_dispose(skeletonDataPtr); -``` - -### After (Generated Wrapper Usage) -```dart -// Clean, type-safe API -final skeletonData = SkeletonData.fromFile(bindings, 'skeleton.json'); -final bones = skeletonData.bones; // Array - -for (final bone in bones) { // Natural Dart iteration - print('Bone: ${bone.name}'); // Direct property access -} - -skeletonData.dispose(); // Clean disposal -``` - -### Advanced Usage -```dart -// Complex operations made simple -final skeleton = Skeleton.create(bindings, skeletonData); -final animState = AnimationState.create(bindings, animStateData); - -// Arrays work like native Dart Lists -final animations = skeleton.data.animations; -final firstAnim = animations[0]; -final animCount = animations.length; - -// Functional programming support -final animNames = animations.map((a) => a.name).toList(); -final longAnims = animations.where((a) => a.duration > 5.0).toList(); - -// Enum usage -skeleton.setSkin('goblin'); -animState.setAnimation(0, firstAnim, true); -animState.setMixByName('idle', 'walk', 0.2); - -// Chaining operations -skeleton.data.bones - .where((bone) => bone.parent != null) - .forEach((bone) => print('Child bone: ${bone.name}')); -``` - -## Build Integration - -### 1. Update `generate_bindings.sh` - -Add Dart wrapper generation to the existing script: - -```bash -#!/bin/bash - -# ... existing FFI generation code ... - -# Generate Dart wrappers -echo "Generating Dart wrapper classes..." -cd src/spine-c/codegen -npm run generate-dart - -echo "✅ All code generation completed!" -``` - -### 2. Add npm script to `spine-c/codegen/package.json` - -```json -{ - "scripts": { - "build": "tsc", - "generate": "npm run build && node dist/index.js", - "generate-dart": "npm run build && node dist/index.js --dart-only", - "test": "echo \"Error: no test specified\" && exit 1" - } -} -``` - -### 3. Update `pubspec.yaml` dependencies - -The generated code will require: - -```yaml -dependencies: - flutter: - sdk: flutter - ffi: ^2.1.0 - # ... existing dependencies -``` - -## Benefits - -### 1. **Developer Experience** -- **Type Safety**: Compile-time checking prevents FFI pointer errors -- **IDE Support**: Full autocomplete, documentation, and refactoring -- **Familiar API**: Uses standard Dart patterns (getters, setters, Lists) -- **Memory Safety**: Automatic lifetime management with dispose patterns - -### 2. **Performance** -- **Zero Copy**: Arrays provide lazy access to native data -- **Minimal Overhead**: Thin wrappers over FFI calls -- **Batch Operations**: Array operations can be optimized in native code - -### 3. **Maintainability** -- **Automatic Updates**: Changes to C++ API automatically flow through -- **Consistent Patterns**: All classes follow the same conventions -- **Documentation**: Generated code includes comprehensive docs -- **Testing**: Type-safe API makes unit testing straightforward - -### 4. **Reliability** -- **No Manual Coding**: Eliminates human error in wrapper implementation -- **Validated Generation**: Uses proven C type information -- **Comprehensive Coverage**: Every C function gets a Dart wrapper - -## Implementation Timeline - -### Phase 1: Core Infrastructure (1-2 weeks) -- [ ] Set up TypeScript generator project structure -- [ ] Implement basic type mapping system -- [ ] Create simple class generator for basic types -- [ ] Test with a few example classes (Animation, Skeleton) - -### Phase 2: Array Support (1 week) -- [ ] Implement generic Array class -- [ ] Add array detection and generation logic -- [ ] Test array functionality with timeline/bone arrays - -### Phase 3: Enum Support (3-5 days) -- [ ] Add enum detection and generation -- [ ] Implement enum value mapping -- [ ] Test with BlendMode and other enums - -### Phase 4: Advanced Features (1 week) -- [ ] Add constructor detection and generation -- [ ] Implement property getter/setter pairing -- [ ] Add disposal pattern detection -- [ ] Memory management best practices - -### Phase 5: Integration & Polish (3-5 days) -- [ ] Integrate with existing build pipeline -- [ ] Add comprehensive documentation -- [ ] Create migration guide from manual FFI -- [ ] Performance testing and optimization - -### Phase 6: Testing & Validation (1 week) -- [ ] Unit tests for all generated wrappers -- [ ] Integration tests with actual Spine files -- [ ] Performance benchmarks vs raw FFI -- [ ] Documentation and examples - -**Total Estimated Time: 4-6 weeks** - -## Future Enhancements - -### 1. **Advanced Memory Management** -- Automatic disposal when objects go out of scope -- Reference counting for shared objects -- Memory leak detection in debug mode - -### 2. **Performance Optimizations** -- Cached property access -- Batch array operations -- Native collection implementations - -### 3. **Developer Tools** -- Debug visualizations for Spine objects -- Memory usage monitoring -- Performance profiling integration - -### 4. **API Enhancements** -- Async/Future support for long operations -- Stream-based event handling -- Reactive programming patterns - -This comprehensive generator will transform the Spine Flutter experience from low-level FFI manipulation to a clean, type-safe, and performant Dart API that feels native to the Flutter ecosystem. \ No newline at end of file diff --git a/spine-flutter/lib/ffi_proxy.dart b/spine-flutter/lib/ffi_proxy.dart deleted file mode 100644 index 425c01f7b..000000000 --- a/spine-flutter/lib/ffi_proxy.dart +++ /dev/null @@ -1,34 +0,0 @@ -/// -/// Spine Runtimes License Agreement -/// Last updated April 5, 2025. Replaces all prior versions. -/// -/// Copyright (c) 2013-2025, Esoteric Software LLC -/// -/// Integration of the Spine Runtimes into software or otherwise creating -/// derivative works of the Spine Runtimes is permitted under the terms and -/// conditions of Section 2 of the Spine Editor License Agreement: -/// http://esotericsoftware.com/spine-editor-license -/// -/// Otherwise, it is permitted to integrate the Spine Runtimes into software -/// or otherwise create derivative works of the Spine Runtimes (collectively, -/// "Products"), provided that each user of the Products must obtain their own -/// Spine Editor license and redistribution of the Products in any form must -/// include this license and copyright notice. -/// -/// THE SPINE RUNTIMES ARE PROVIDED BY ESOTERIC SOFTWARE LLC "AS IS" AND ANY -/// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -/// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -/// DISCLAIMED. IN NO EVENT SHALL ESOTERIC SOFTWARE LLC BE LIABLE FOR ANY -/// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -/// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, -/// BUSINESS INTERRUPTION, OR LOSS OF USE, DATA, OR PROFITS) HOWEVER CAUSED AND -/// ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -/// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF -/// THE SPINE RUNTIMES, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -/// - -export 'dart:ffi' if (dart.library.html) 'package:wasm_ffi/ffi.dart'; - -export 'package:ffi/ffi.dart' if (dart.library.html) 'package:wasm_ffi/ffi_utils.dart'; -// Only export our custom malloc on native platforms -export 'malloc_native.dart' if (dart.library.io) 'malloc_native.dart'; diff --git a/spine-flutter/lib/ffi_utf8.dart b/spine-flutter/lib/ffi_utf8.dart deleted file mode 100644 index b117af4c6..000000000 --- a/spine-flutter/lib/ffi_utf8.dart +++ /dev/null @@ -1,87 +0,0 @@ -// Copyright (c) 2019, the Dart project authors. Please see the AUTHORS file -// for details. All rights reserved. Use of this source code is governed by a -// BSD-style license that can be found in the LICENSE file. - -import 'dart:convert'; -import 'dart:typed_data'; - -import 'ffi_proxy.dart'; - -/// The contents of a native zero-terminated array of UTF-8 code units. -/// -/// The Utf8 type itself has no functionality, it's only intended to be used -/// through a `Pointer` representing the entire array. This pointer is -/// the equivalent of a char pointer (`const char*`) in C code. -final class Utf8 extends Opaque {} - -/// Extension method for converting a`Pointer` to a [String]. -extension Utf8Pointer on Pointer { - /// The number of UTF-8 code units in this zero-terminated UTF-8 string. - /// - /// The UTF-8 code units of the strings are the non-zero code units up to the - /// first zero code unit. - int get length { - _ensureNotNullptr('length'); - final codeUnits = cast(); - return _length(codeUnits); - } - - /// Converts this UTF-8 encoded string to a Dart string. - /// - /// Decodes the UTF-8 code units of this zero-terminated byte array as - /// Unicode code points and creates a Dart string containing those code - /// points. - /// - /// If [length] is provided, zero-termination is ignored and the result can - /// contain NUL characters. - /// - /// If [length] is not provided, the returned string is the string up til - /// but not including the first NUL character. - String toDartString({int? length}) { - _ensureNotNullptr('toDartString'); - final codeUnits = cast(); - if (length != null) { - RangeError.checkNotNegative(length, 'length'); - } else { - length = _length(codeUnits); - } - return utf8.decode(codeUnits.asTypedList(length)); - } - - static int _length(Pointer codeUnits) { - var length = 0; - while (codeUnits[length] != 0) { - length++; - } - return length; - } - - void _ensureNotNullptr(String operation) { - if (this == nullptr) { - throw UnsupportedError("Operation '$operation' not allowed on a 'nullptr'."); - } - } -} - -/// Extension method for converting a [String] to a `Pointer`. -extension StringUtf8Pointer on String { - /// Creates a zero-terminated [Utf8] code-unit array from this String. - /// - /// If this [String] contains NUL characters, converting it back to a string - /// using [Utf8Pointer.toDartString] will truncate the result if a length is - /// not passed. - /// - /// Unpaired surrogate code points in this [String] will be encoded as - /// replacement characters (U+FFFD, encoded as the bytes 0xEF 0xBF 0xBD) in - /// the UTF-8 encoded result. See [Utf8Encoder] for details on encoding. - /// - /// Returns an [allocator]-allocated pointer to the result. - Pointer toNativeUtf8({Allocator allocator = malloc}) { - final units = utf8.encode(this); - final Pointer result = allocator(units.length + 1); - final Uint8List nativeString = result.asTypedList(units.length + 1); - nativeString.setAll(0, units); - nativeString[units.length] = 0; - return result.cast(); - } -} diff --git a/spine-flutter/lib/generated/alpha_timeline.dart b/spine-flutter/lib/generated/alpha_timeline.dart index dc5ef8d82..1d06e3780 100644 --- a/spine-flutter/lib/generated/alpha_timeline.dart +++ b/spine-flutter/lib/generated/alpha_timeline.dart @@ -29,7 +29,7 @@ // AUTO GENERATED FILE, DO NOT EDIT. -import '../ffi_proxy.dart'; +import 'package:universal_ffi/ffi.dart'; import 'spine_dart_bindings_generated.dart'; import '../spine_bindings.dart'; import 'curve_timeline1.dart'; diff --git a/spine-flutter/lib/generated/animation.dart b/spine-flutter/lib/generated/animation.dart index 73073f20e..c9195170a 100644 --- a/spine-flutter/lib/generated/animation.dart +++ b/spine-flutter/lib/generated/animation.dart @@ -29,7 +29,8 @@ // AUTO GENERATED FILE, DO NOT EDIT. -import '../ffi_proxy.dart'; +import 'package:universal_ffi/ffi.dart'; +import 'package:universal_ffi/ffi_utils.dart'; import 'spine_dart_bindings_generated.dart'; import '../spine_bindings.dart'; import 'arrays.dart'; diff --git a/spine-flutter/lib/generated/animation_state.dart b/spine-flutter/lib/generated/animation_state.dart index 7768a3ce7..f2034f3ce 100644 --- a/spine-flutter/lib/generated/animation_state.dart +++ b/spine-flutter/lib/generated/animation_state.dart @@ -29,7 +29,8 @@ // AUTO GENERATED FILE, DO NOT EDIT. -import '../ffi_proxy.dart'; +import 'package:universal_ffi/ffi.dart'; +import 'package:universal_ffi/ffi_utils.dart'; import 'spine_dart_bindings_generated.dart'; import '../spine_bindings.dart'; import 'animation.dart'; diff --git a/spine-flutter/lib/generated/animation_state_data.dart b/spine-flutter/lib/generated/animation_state_data.dart index 5415ee9d3..576aabc4b 100644 --- a/spine-flutter/lib/generated/animation_state_data.dart +++ b/spine-flutter/lib/generated/animation_state_data.dart @@ -29,7 +29,8 @@ // AUTO GENERATED FILE, DO NOT EDIT. -import '../ffi_proxy.dart'; +import 'package:universal_ffi/ffi.dart'; +import 'package:universal_ffi/ffi_utils.dart'; import 'spine_dart_bindings_generated.dart'; import '../spine_bindings.dart'; import 'animation.dart'; diff --git a/spine-flutter/lib/generated/arrays.dart b/spine-flutter/lib/generated/arrays.dart index 3677e58ed..d1ac43164 100644 --- a/spine-flutter/lib/generated/arrays.dart +++ b/spine-flutter/lib/generated/arrays.dart @@ -29,7 +29,8 @@ // AUTO GENERATED FILE, DO NOT EDIT. -import '../ffi_proxy.dart'; +import 'package:universal_ffi/ffi.dart'; +import 'package:universal_ffi/ffi_utils.dart'; import 'spine_dart_bindings_generated.dart'; import '../spine_bindings.dart'; import '../native_array.dart'; diff --git a/spine-flutter/lib/generated/atlas.dart b/spine-flutter/lib/generated/atlas.dart index f65d35ede..1849f30ba 100644 --- a/spine-flutter/lib/generated/atlas.dart +++ b/spine-flutter/lib/generated/atlas.dart @@ -29,7 +29,8 @@ // AUTO GENERATED FILE, DO NOT EDIT. -import '../ffi_proxy.dart'; +import 'package:universal_ffi/ffi.dart'; +import 'package:universal_ffi/ffi_utils.dart'; import 'spine_dart_bindings_generated.dart'; import '../spine_bindings.dart'; import 'arrays.dart'; diff --git a/spine-flutter/lib/generated/atlas_attachment_loader.dart b/spine-flutter/lib/generated/atlas_attachment_loader.dart index 7ee453280..eda15ec98 100644 --- a/spine-flutter/lib/generated/atlas_attachment_loader.dart +++ b/spine-flutter/lib/generated/atlas_attachment_loader.dart @@ -29,7 +29,8 @@ // AUTO GENERATED FILE, DO NOT EDIT. -import '../ffi_proxy.dart'; +import 'package:universal_ffi/ffi.dart'; +import 'package:universal_ffi/ffi_utils.dart'; import 'spine_dart_bindings_generated.dart'; import '../spine_bindings.dart'; import 'atlas.dart'; diff --git a/spine-flutter/lib/generated/atlas_page.dart b/spine-flutter/lib/generated/atlas_page.dart index dbd97261e..892ed0906 100644 --- a/spine-flutter/lib/generated/atlas_page.dart +++ b/spine-flutter/lib/generated/atlas_page.dart @@ -29,7 +29,8 @@ // AUTO GENERATED FILE, DO NOT EDIT. -import '../ffi_proxy.dart'; +import 'package:universal_ffi/ffi.dart'; +import 'package:universal_ffi/ffi_utils.dart'; import 'spine_dart_bindings_generated.dart'; import '../spine_bindings.dart'; import 'format.dart'; diff --git a/spine-flutter/lib/generated/atlas_region.dart b/spine-flutter/lib/generated/atlas_region.dart index e79fbe22e..03048d170 100644 --- a/spine-flutter/lib/generated/atlas_region.dart +++ b/spine-flutter/lib/generated/atlas_region.dart @@ -29,7 +29,8 @@ // AUTO GENERATED FILE, DO NOT EDIT. -import '../ffi_proxy.dart'; +import 'package:universal_ffi/ffi.dart'; +import 'package:universal_ffi/ffi_utils.dart'; import 'spine_dart_bindings_generated.dart'; import '../spine_bindings.dart'; import 'arrays.dart'; diff --git a/spine-flutter/lib/generated/attachment.dart b/spine-flutter/lib/generated/attachment.dart index 2296ad524..d0cf46c0d 100644 --- a/spine-flutter/lib/generated/attachment.dart +++ b/spine-flutter/lib/generated/attachment.dart @@ -29,7 +29,8 @@ // AUTO GENERATED FILE, DO NOT EDIT. -import '../ffi_proxy.dart'; +import 'package:universal_ffi/ffi.dart'; +import 'package:universal_ffi/ffi_utils.dart'; import 'spine_dart_bindings_generated.dart'; import '../spine_bindings.dart'; import 'rtti.dart'; diff --git a/spine-flutter/lib/generated/attachment_loader.dart b/spine-flutter/lib/generated/attachment_loader.dart index bb63bf40b..e020ab655 100644 --- a/spine-flutter/lib/generated/attachment_loader.dart +++ b/spine-flutter/lib/generated/attachment_loader.dart @@ -29,7 +29,7 @@ // AUTO GENERATED FILE, DO NOT EDIT. -import '../ffi_proxy.dart'; +import 'package:universal_ffi/ffi.dart'; import 'bounding_box_attachment.dart'; import 'clipping_attachment.dart'; import 'mesh_attachment.dart'; diff --git a/spine-flutter/lib/generated/attachment_timeline.dart b/spine-flutter/lib/generated/attachment_timeline.dart index c358f594f..0add1e447 100644 --- a/spine-flutter/lib/generated/attachment_timeline.dart +++ b/spine-flutter/lib/generated/attachment_timeline.dart @@ -29,7 +29,8 @@ // AUTO GENERATED FILE, DO NOT EDIT. -import '../ffi_proxy.dart'; +import 'package:universal_ffi/ffi.dart'; +import 'package:universal_ffi/ffi_utils.dart'; import 'spine_dart_bindings_generated.dart'; import '../spine_bindings.dart'; import 'slot_timeline.dart'; diff --git a/spine-flutter/lib/generated/bone.dart b/spine-flutter/lib/generated/bone.dart index 94fa22d2c..5eafb0661 100644 --- a/spine-flutter/lib/generated/bone.dart +++ b/spine-flutter/lib/generated/bone.dart @@ -29,7 +29,7 @@ // AUTO GENERATED FILE, DO NOT EDIT. -import '../ffi_proxy.dart'; +import 'package:universal_ffi/ffi.dart'; import 'spine_dart_bindings_generated.dart'; import '../spine_bindings.dart'; import 'rtti.dart'; diff --git a/spine-flutter/lib/generated/bone_data.dart b/spine-flutter/lib/generated/bone_data.dart index 3834bdd98..105578eb5 100644 --- a/spine-flutter/lib/generated/bone_data.dart +++ b/spine-flutter/lib/generated/bone_data.dart @@ -29,7 +29,8 @@ // AUTO GENERATED FILE, DO NOT EDIT. -import '../ffi_proxy.dart'; +import 'package:universal_ffi/ffi.dart'; +import 'package:universal_ffi/ffi_utils.dart'; import 'spine_dart_bindings_generated.dart'; import '../spine_bindings.dart'; import 'bone_local.dart'; diff --git a/spine-flutter/lib/generated/bone_local.dart b/spine-flutter/lib/generated/bone_local.dart index b1319f941..b95b8d795 100644 --- a/spine-flutter/lib/generated/bone_local.dart +++ b/spine-flutter/lib/generated/bone_local.dart @@ -29,7 +29,7 @@ // AUTO GENERATED FILE, DO NOT EDIT. -import '../ffi_proxy.dart'; +import 'package:universal_ffi/ffi.dart'; import 'spine_dart_bindings_generated.dart'; import '../spine_bindings.dart'; import 'inherit.dart'; diff --git a/spine-flutter/lib/generated/bone_pose.dart b/spine-flutter/lib/generated/bone_pose.dart index 6689d875f..66286e673 100644 --- a/spine-flutter/lib/generated/bone_pose.dart +++ b/spine-flutter/lib/generated/bone_pose.dart @@ -29,7 +29,7 @@ // AUTO GENERATED FILE, DO NOT EDIT. -import '../ffi_proxy.dart'; +import 'package:universal_ffi/ffi.dart'; import 'spine_dart_bindings_generated.dart'; import '../spine_bindings.dart'; import 'rtti.dart'; diff --git a/spine-flutter/lib/generated/bone_timeline.dart b/spine-flutter/lib/generated/bone_timeline.dart index 890326e02..df5b1810a 100644 --- a/spine-flutter/lib/generated/bone_timeline.dart +++ b/spine-flutter/lib/generated/bone_timeline.dart @@ -29,7 +29,7 @@ // AUTO GENERATED FILE, DO NOT EDIT. -import '../ffi_proxy.dart'; +import 'package:universal_ffi/ffi.dart'; import '../spine_bindings.dart'; import 'rtti.dart'; diff --git a/spine-flutter/lib/generated/bone_timeline1.dart b/spine-flutter/lib/generated/bone_timeline1.dart index 1a2922ae1..f33801c4c 100644 --- a/spine-flutter/lib/generated/bone_timeline1.dart +++ b/spine-flutter/lib/generated/bone_timeline1.dart @@ -29,7 +29,7 @@ // AUTO GENERATED FILE, DO NOT EDIT. -import '../ffi_proxy.dart'; +import 'package:universal_ffi/ffi.dart'; import 'spine_dart_bindings_generated.dart'; import '../spine_bindings.dart'; import 'bone_timeline.dart'; diff --git a/spine-flutter/lib/generated/bone_timeline2.dart b/spine-flutter/lib/generated/bone_timeline2.dart index 59444aba1..2e5bc1ab7 100644 --- a/spine-flutter/lib/generated/bone_timeline2.dart +++ b/spine-flutter/lib/generated/bone_timeline2.dart @@ -29,7 +29,7 @@ // AUTO GENERATED FILE, DO NOT EDIT. -import '../ffi_proxy.dart'; +import 'package:universal_ffi/ffi.dart'; import 'spine_dart_bindings_generated.dart'; import '../spine_bindings.dart'; import 'bone_timeline.dart'; diff --git a/spine-flutter/lib/generated/bounding_box_attachment.dart b/spine-flutter/lib/generated/bounding_box_attachment.dart index 58f9259b1..b1c154a37 100644 --- a/spine-flutter/lib/generated/bounding_box_attachment.dart +++ b/spine-flutter/lib/generated/bounding_box_attachment.dart @@ -29,7 +29,8 @@ // AUTO GENERATED FILE, DO NOT EDIT. -import '../ffi_proxy.dart'; +import 'package:universal_ffi/ffi.dart'; +import 'package:universal_ffi/ffi_utils.dart'; import 'spine_dart_bindings_generated.dart'; import '../spine_bindings.dart'; import 'color.dart'; diff --git a/spine-flutter/lib/generated/clipping_attachment.dart b/spine-flutter/lib/generated/clipping_attachment.dart index 3e98cf436..c332411de 100644 --- a/spine-flutter/lib/generated/clipping_attachment.dart +++ b/spine-flutter/lib/generated/clipping_attachment.dart @@ -29,7 +29,8 @@ // AUTO GENERATED FILE, DO NOT EDIT. -import '../ffi_proxy.dart'; +import 'package:universal_ffi/ffi.dart'; +import 'package:universal_ffi/ffi_utils.dart'; import 'spine_dart_bindings_generated.dart'; import '../spine_bindings.dart'; import 'color.dart'; diff --git a/spine-flutter/lib/generated/color.dart b/spine-flutter/lib/generated/color.dart index 98d6b2fd0..1e7f9e21f 100644 --- a/spine-flutter/lib/generated/color.dart +++ b/spine-flutter/lib/generated/color.dart @@ -29,7 +29,8 @@ // AUTO GENERATED FILE, DO NOT EDIT. -import '../ffi_proxy.dart'; +import 'package:universal_ffi/ffi.dart'; +import 'package:universal_ffi/ffi_utils.dart'; import 'spine_dart_bindings_generated.dart'; import '../spine_bindings.dart'; diff --git a/spine-flutter/lib/generated/constraint.dart b/spine-flutter/lib/generated/constraint.dart index cc6ffcb84..676be9571 100644 --- a/spine-flutter/lib/generated/constraint.dart +++ b/spine-flutter/lib/generated/constraint.dart @@ -29,7 +29,7 @@ // AUTO GENERATED FILE, DO NOT EDIT. -import '../ffi_proxy.dart'; +import 'package:universal_ffi/ffi.dart'; import '../spine_bindings.dart'; import 'rtti.dart'; import 'constraint_data.dart'; diff --git a/spine-flutter/lib/generated/constraint_data.dart b/spine-flutter/lib/generated/constraint_data.dart index 2e0770618..eb24bd9c9 100644 --- a/spine-flutter/lib/generated/constraint_data.dart +++ b/spine-flutter/lib/generated/constraint_data.dart @@ -29,7 +29,7 @@ // AUTO GENERATED FILE, DO NOT EDIT. -import '../ffi_proxy.dart'; +import 'package:universal_ffi/ffi.dart'; import '../spine_bindings.dart'; import 'rtti.dart'; import 'constraint.dart'; diff --git a/spine-flutter/lib/generated/constraint_timeline.dart b/spine-flutter/lib/generated/constraint_timeline.dart index 67d000f33..29a3dcb0c 100644 --- a/spine-flutter/lib/generated/constraint_timeline.dart +++ b/spine-flutter/lib/generated/constraint_timeline.dart @@ -29,7 +29,7 @@ // AUTO GENERATED FILE, DO NOT EDIT. -import '../ffi_proxy.dart'; +import 'package:universal_ffi/ffi.dart'; import '../spine_bindings.dart'; import 'rtti.dart'; diff --git a/spine-flutter/lib/generated/constraint_timeline1.dart b/spine-flutter/lib/generated/constraint_timeline1.dart index cdddfbcfa..b5515df1e 100644 --- a/spine-flutter/lib/generated/constraint_timeline1.dart +++ b/spine-flutter/lib/generated/constraint_timeline1.dart @@ -29,7 +29,7 @@ // AUTO GENERATED FILE, DO NOT EDIT. -import '../ffi_proxy.dart'; +import 'package:universal_ffi/ffi.dart'; import 'spine_dart_bindings_generated.dart'; import '../spine_bindings.dart'; import 'constraint_timeline.dart'; diff --git a/spine-flutter/lib/generated/curve_timeline.dart b/spine-flutter/lib/generated/curve_timeline.dart index 4f72bfcf9..1da0b3526 100644 --- a/spine-flutter/lib/generated/curve_timeline.dart +++ b/spine-flutter/lib/generated/curve_timeline.dart @@ -29,7 +29,7 @@ // AUTO GENERATED FILE, DO NOT EDIT. -import '../ffi_proxy.dart'; +import 'package:universal_ffi/ffi.dart'; import 'spine_dart_bindings_generated.dart'; import '../spine_bindings.dart'; import 'arrays.dart'; diff --git a/spine-flutter/lib/generated/curve_timeline1.dart b/spine-flutter/lib/generated/curve_timeline1.dart index d3f3a2f36..6afda67f5 100644 --- a/spine-flutter/lib/generated/curve_timeline1.dart +++ b/spine-flutter/lib/generated/curve_timeline1.dart @@ -29,7 +29,7 @@ // AUTO GENERATED FILE, DO NOT EDIT. -import '../ffi_proxy.dart'; +import 'package:universal_ffi/ffi.dart'; import 'spine_dart_bindings_generated.dart'; import '../spine_bindings.dart'; import 'curve_timeline.dart'; diff --git a/spine-flutter/lib/generated/deform_timeline.dart b/spine-flutter/lib/generated/deform_timeline.dart index ecd11e5f9..f6f3e98ea 100644 --- a/spine-flutter/lib/generated/deform_timeline.dart +++ b/spine-flutter/lib/generated/deform_timeline.dart @@ -29,7 +29,8 @@ // AUTO GENERATED FILE, DO NOT EDIT. -import '../ffi_proxy.dart'; +import 'package:universal_ffi/ffi.dart'; +import 'package:universal_ffi/ffi_utils.dart'; import 'spine_dart_bindings_generated.dart'; import '../spine_bindings.dart'; import 'arrays.dart'; diff --git a/spine-flutter/lib/generated/draw_order_timeline.dart b/spine-flutter/lib/generated/draw_order_timeline.dart index 5a33498a5..9decd6c1b 100644 --- a/spine-flutter/lib/generated/draw_order_timeline.dart +++ b/spine-flutter/lib/generated/draw_order_timeline.dart @@ -29,7 +29,7 @@ // AUTO GENERATED FILE, DO NOT EDIT. -import '../ffi_proxy.dart'; +import 'package:universal_ffi/ffi.dart'; import 'spine_dart_bindings_generated.dart'; import '../spine_bindings.dart'; import 'arrays.dart'; diff --git a/spine-flutter/lib/generated/event.dart b/spine-flutter/lib/generated/event.dart index 17a672431..e8d8bf215 100644 --- a/spine-flutter/lib/generated/event.dart +++ b/spine-flutter/lib/generated/event.dart @@ -29,7 +29,8 @@ // AUTO GENERATED FILE, DO NOT EDIT. -import '../ffi_proxy.dart'; +import 'package:universal_ffi/ffi.dart'; +import 'package:universal_ffi/ffi_utils.dart'; import 'spine_dart_bindings_generated.dart'; import '../spine_bindings.dart'; import 'event_data.dart'; diff --git a/spine-flutter/lib/generated/event_data.dart b/spine-flutter/lib/generated/event_data.dart index 45e51c6b6..cfd7dc744 100644 --- a/spine-flutter/lib/generated/event_data.dart +++ b/spine-flutter/lib/generated/event_data.dart @@ -29,7 +29,8 @@ // AUTO GENERATED FILE, DO NOT EDIT. -import '../ffi_proxy.dart'; +import 'package:universal_ffi/ffi.dart'; +import 'package:universal_ffi/ffi_utils.dart'; import 'spine_dart_bindings_generated.dart'; import '../spine_bindings.dart'; diff --git a/spine-flutter/lib/generated/event_queue_entry.dart b/spine-flutter/lib/generated/event_queue_entry.dart index 2c3bc9591..c353b4452 100644 --- a/spine-flutter/lib/generated/event_queue_entry.dart +++ b/spine-flutter/lib/generated/event_queue_entry.dart @@ -29,7 +29,7 @@ // AUTO GENERATED FILE, DO NOT EDIT. -import '../ffi_proxy.dart'; +import 'package:universal_ffi/ffi.dart'; import 'spine_dart_bindings_generated.dart'; import '../spine_bindings.dart'; import 'event.dart'; diff --git a/spine-flutter/lib/generated/event_timeline.dart b/spine-flutter/lib/generated/event_timeline.dart index 5a1c41ca5..72daca316 100644 --- a/spine-flutter/lib/generated/event_timeline.dart +++ b/spine-flutter/lib/generated/event_timeline.dart @@ -29,7 +29,7 @@ // AUTO GENERATED FILE, DO NOT EDIT. -import '../ffi_proxy.dart'; +import 'package:universal_ffi/ffi.dart'; import 'spine_dart_bindings_generated.dart'; import '../spine_bindings.dart'; import 'arrays.dart'; diff --git a/spine-flutter/lib/generated/from_property.dart b/spine-flutter/lib/generated/from_property.dart index ff85ac5fb..c56ebbd91 100644 --- a/spine-flutter/lib/generated/from_property.dart +++ b/spine-flutter/lib/generated/from_property.dart @@ -29,7 +29,7 @@ // AUTO GENERATED FILE, DO NOT EDIT. -import '../ffi_proxy.dart'; +import 'package:universal_ffi/ffi.dart'; import 'spine_dart_bindings_generated.dart'; import '../spine_bindings.dart'; import 'rtti.dart'; diff --git a/spine-flutter/lib/generated/from_rotate.dart b/spine-flutter/lib/generated/from_rotate.dart index 736223ba7..be194d063 100644 --- a/spine-flutter/lib/generated/from_rotate.dart +++ b/spine-flutter/lib/generated/from_rotate.dart @@ -29,7 +29,7 @@ // AUTO GENERATED FILE, DO NOT EDIT. -import '../ffi_proxy.dart'; +import 'package:universal_ffi/ffi.dart'; import 'spine_dart_bindings_generated.dart'; import '../spine_bindings.dart'; import 'from_property.dart'; diff --git a/spine-flutter/lib/generated/from_scale_x.dart b/spine-flutter/lib/generated/from_scale_x.dart index b3dae0d08..55cde3dff 100644 --- a/spine-flutter/lib/generated/from_scale_x.dart +++ b/spine-flutter/lib/generated/from_scale_x.dart @@ -29,7 +29,7 @@ // AUTO GENERATED FILE, DO NOT EDIT. -import '../ffi_proxy.dart'; +import 'package:universal_ffi/ffi.dart'; import 'spine_dart_bindings_generated.dart'; import '../spine_bindings.dart'; import 'from_property.dart'; diff --git a/spine-flutter/lib/generated/from_scale_y.dart b/spine-flutter/lib/generated/from_scale_y.dart index dd275388c..9e4ee3d10 100644 --- a/spine-flutter/lib/generated/from_scale_y.dart +++ b/spine-flutter/lib/generated/from_scale_y.dart @@ -29,7 +29,7 @@ // AUTO GENERATED FILE, DO NOT EDIT. -import '../ffi_proxy.dart'; +import 'package:universal_ffi/ffi.dart'; import 'spine_dart_bindings_generated.dart'; import '../spine_bindings.dart'; import 'from_property.dart'; diff --git a/spine-flutter/lib/generated/from_shear_y.dart b/spine-flutter/lib/generated/from_shear_y.dart index 0c05de818..6d438c5f8 100644 --- a/spine-flutter/lib/generated/from_shear_y.dart +++ b/spine-flutter/lib/generated/from_shear_y.dart @@ -29,7 +29,7 @@ // AUTO GENERATED FILE, DO NOT EDIT. -import '../ffi_proxy.dart'; +import 'package:universal_ffi/ffi.dart'; import 'spine_dart_bindings_generated.dart'; import '../spine_bindings.dart'; import 'from_property.dart'; diff --git a/spine-flutter/lib/generated/from_x.dart b/spine-flutter/lib/generated/from_x.dart index 6ac332ca6..c07430ce8 100644 --- a/spine-flutter/lib/generated/from_x.dart +++ b/spine-flutter/lib/generated/from_x.dart @@ -29,7 +29,7 @@ // AUTO GENERATED FILE, DO NOT EDIT. -import '../ffi_proxy.dart'; +import 'package:universal_ffi/ffi.dart'; import 'spine_dart_bindings_generated.dart'; import '../spine_bindings.dart'; import 'from_property.dart'; diff --git a/spine-flutter/lib/generated/from_y.dart b/spine-flutter/lib/generated/from_y.dart index 8a3627a69..c185ef4f9 100644 --- a/spine-flutter/lib/generated/from_y.dart +++ b/spine-flutter/lib/generated/from_y.dart @@ -29,7 +29,7 @@ // AUTO GENERATED FILE, DO NOT EDIT. -import '../ffi_proxy.dart'; +import 'package:universal_ffi/ffi.dart'; import 'spine_dart_bindings_generated.dart'; import '../spine_bindings.dart'; import 'from_property.dart'; diff --git a/spine-flutter/lib/generated/ik_constraint.dart b/spine-flutter/lib/generated/ik_constraint.dart index 57cfc8050..b63d7716c 100644 --- a/spine-flutter/lib/generated/ik_constraint.dart +++ b/spine-flutter/lib/generated/ik_constraint.dart @@ -29,7 +29,7 @@ // AUTO GENERATED FILE, DO NOT EDIT. -import '../ffi_proxy.dart'; +import 'package:universal_ffi/ffi.dart'; import 'spine_dart_bindings_generated.dart'; import '../spine_bindings.dart'; import 'rtti.dart'; diff --git a/spine-flutter/lib/generated/ik_constraint_data.dart b/spine-flutter/lib/generated/ik_constraint_data.dart index ec53e4675..85f445e8c 100644 --- a/spine-flutter/lib/generated/ik_constraint_data.dart +++ b/spine-flutter/lib/generated/ik_constraint_data.dart @@ -29,7 +29,8 @@ // AUTO GENERATED FILE, DO NOT EDIT. -import '../ffi_proxy.dart'; +import 'package:universal_ffi/ffi.dart'; +import 'package:universal_ffi/ffi_utils.dart'; import 'spine_dart_bindings_generated.dart'; import '../spine_bindings.dart'; import 'rtti.dart'; diff --git a/spine-flutter/lib/generated/ik_constraint_pose.dart b/spine-flutter/lib/generated/ik_constraint_pose.dart index b02d17ae9..444a8ecfc 100644 --- a/spine-flutter/lib/generated/ik_constraint_pose.dart +++ b/spine-flutter/lib/generated/ik_constraint_pose.dart @@ -29,7 +29,7 @@ // AUTO GENERATED FILE, DO NOT EDIT. -import '../ffi_proxy.dart'; +import 'package:universal_ffi/ffi.dart'; import 'spine_dart_bindings_generated.dart'; import '../spine_bindings.dart'; diff --git a/spine-flutter/lib/generated/ik_constraint_timeline.dart b/spine-flutter/lib/generated/ik_constraint_timeline.dart index 9e967a781..00452951d 100644 --- a/spine-flutter/lib/generated/ik_constraint_timeline.dart +++ b/spine-flutter/lib/generated/ik_constraint_timeline.dart @@ -29,7 +29,7 @@ // AUTO GENERATED FILE, DO NOT EDIT. -import '../ffi_proxy.dart'; +import 'package:universal_ffi/ffi.dart'; import 'spine_dart_bindings_generated.dart'; import '../spine_bindings.dart'; import 'constraint_timeline.dart'; diff --git a/spine-flutter/lib/generated/inherit_timeline.dart b/spine-flutter/lib/generated/inherit_timeline.dart index d6f459bd4..367792383 100644 --- a/spine-flutter/lib/generated/inherit_timeline.dart +++ b/spine-flutter/lib/generated/inherit_timeline.dart @@ -29,7 +29,7 @@ // AUTO GENERATED FILE, DO NOT EDIT. -import '../ffi_proxy.dart'; +import 'package:universal_ffi/ffi.dart'; import 'spine_dart_bindings_generated.dart'; import '../spine_bindings.dart'; import 'bone_timeline.dart'; diff --git a/spine-flutter/lib/generated/linked_mesh.dart b/spine-flutter/lib/generated/linked_mesh.dart index af047e733..202bae5ce 100644 --- a/spine-flutter/lib/generated/linked_mesh.dart +++ b/spine-flutter/lib/generated/linked_mesh.dart @@ -29,7 +29,7 @@ // AUTO GENERATED FILE, DO NOT EDIT. -import '../ffi_proxy.dart'; +import 'package:universal_ffi/ffi.dart'; /// LinkedMesh wrapper abstract class LinkedMesh { diff --git a/spine-flutter/lib/generated/mesh_attachment.dart b/spine-flutter/lib/generated/mesh_attachment.dart index 9fb0bf606..b9adc02ce 100644 --- a/spine-flutter/lib/generated/mesh_attachment.dart +++ b/spine-flutter/lib/generated/mesh_attachment.dart @@ -29,7 +29,8 @@ // AUTO GENERATED FILE, DO NOT EDIT. -import '../ffi_proxy.dart'; +import 'package:universal_ffi/ffi.dart'; +import 'package:universal_ffi/ffi_utils.dart'; import 'spine_dart_bindings_generated.dart'; import '../spine_bindings.dart'; import 'arrays.dart'; diff --git a/spine-flutter/lib/generated/path_attachment.dart b/spine-flutter/lib/generated/path_attachment.dart index 553f2fd4d..01064bd6f 100644 --- a/spine-flutter/lib/generated/path_attachment.dart +++ b/spine-flutter/lib/generated/path_attachment.dart @@ -29,7 +29,8 @@ // AUTO GENERATED FILE, DO NOT EDIT. -import '../ffi_proxy.dart'; +import 'package:universal_ffi/ffi.dart'; +import 'package:universal_ffi/ffi_utils.dart'; import 'spine_dart_bindings_generated.dart'; import '../spine_bindings.dart'; import 'arrays.dart'; diff --git a/spine-flutter/lib/generated/path_constraint.dart b/spine-flutter/lib/generated/path_constraint.dart index f140bbccd..64895d89b 100644 --- a/spine-flutter/lib/generated/path_constraint.dart +++ b/spine-flutter/lib/generated/path_constraint.dart @@ -29,7 +29,7 @@ // AUTO GENERATED FILE, DO NOT EDIT. -import '../ffi_proxy.dart'; +import 'package:universal_ffi/ffi.dart'; import 'spine_dart_bindings_generated.dart'; import '../spine_bindings.dart'; import 'rtti.dart'; diff --git a/spine-flutter/lib/generated/path_constraint_data.dart b/spine-flutter/lib/generated/path_constraint_data.dart index 917a0565b..75c59a78f 100644 --- a/spine-flutter/lib/generated/path_constraint_data.dart +++ b/spine-flutter/lib/generated/path_constraint_data.dart @@ -29,7 +29,8 @@ // AUTO GENERATED FILE, DO NOT EDIT. -import '../ffi_proxy.dart'; +import 'package:universal_ffi/ffi.dart'; +import 'package:universal_ffi/ffi_utils.dart'; import 'spine_dart_bindings_generated.dart'; import '../spine_bindings.dart'; import 'rtti.dart'; diff --git a/spine-flutter/lib/generated/path_constraint_mix_timeline.dart b/spine-flutter/lib/generated/path_constraint_mix_timeline.dart index f2f3e269f..46c479b27 100644 --- a/spine-flutter/lib/generated/path_constraint_mix_timeline.dart +++ b/spine-flutter/lib/generated/path_constraint_mix_timeline.dart @@ -29,7 +29,7 @@ // AUTO GENERATED FILE, DO NOT EDIT. -import '../ffi_proxy.dart'; +import 'package:universal_ffi/ffi.dart'; import 'spine_dart_bindings_generated.dart'; import '../spine_bindings.dart'; import 'constraint_timeline.dart'; diff --git a/spine-flutter/lib/generated/path_constraint_pose.dart b/spine-flutter/lib/generated/path_constraint_pose.dart index a843aed0a..96e0794ae 100644 --- a/spine-flutter/lib/generated/path_constraint_pose.dart +++ b/spine-flutter/lib/generated/path_constraint_pose.dart @@ -29,7 +29,7 @@ // AUTO GENERATED FILE, DO NOT EDIT. -import '../ffi_proxy.dart'; +import 'package:universal_ffi/ffi.dart'; import 'spine_dart_bindings_generated.dart'; import '../spine_bindings.dart'; diff --git a/spine-flutter/lib/generated/path_constraint_position_timeline.dart b/spine-flutter/lib/generated/path_constraint_position_timeline.dart index 6057ad671..eb4814a5b 100644 --- a/spine-flutter/lib/generated/path_constraint_position_timeline.dart +++ b/spine-flutter/lib/generated/path_constraint_position_timeline.dart @@ -29,7 +29,7 @@ // AUTO GENERATED FILE, DO NOT EDIT. -import '../ffi_proxy.dart'; +import 'package:universal_ffi/ffi.dart'; import 'spine_dart_bindings_generated.dart'; import '../spine_bindings.dart'; import 'constraint_timeline1.dart'; diff --git a/spine-flutter/lib/generated/path_constraint_spacing_timeline.dart b/spine-flutter/lib/generated/path_constraint_spacing_timeline.dart index 0b7dc6e67..55c06376b 100644 --- a/spine-flutter/lib/generated/path_constraint_spacing_timeline.dart +++ b/spine-flutter/lib/generated/path_constraint_spacing_timeline.dart @@ -29,7 +29,7 @@ // AUTO GENERATED FILE, DO NOT EDIT. -import '../ffi_proxy.dart'; +import 'package:universal_ffi/ffi.dart'; import 'spine_dart_bindings_generated.dart'; import '../spine_bindings.dart'; import 'constraint_timeline1.dart'; diff --git a/spine-flutter/lib/generated/physics_constraint.dart b/spine-flutter/lib/generated/physics_constraint.dart index 6d57a039f..f0c2daaea 100644 --- a/spine-flutter/lib/generated/physics_constraint.dart +++ b/spine-flutter/lib/generated/physics_constraint.dart @@ -29,7 +29,7 @@ // AUTO GENERATED FILE, DO NOT EDIT. -import '../ffi_proxy.dart'; +import 'package:universal_ffi/ffi.dart'; import 'spine_dart_bindings_generated.dart'; import '../spine_bindings.dart'; import 'rtti.dart'; diff --git a/spine-flutter/lib/generated/physics_constraint_damping_timeline.dart b/spine-flutter/lib/generated/physics_constraint_damping_timeline.dart index 5f3da22f6..966255047 100644 --- a/spine-flutter/lib/generated/physics_constraint_damping_timeline.dart +++ b/spine-flutter/lib/generated/physics_constraint_damping_timeline.dart @@ -29,7 +29,7 @@ // AUTO GENERATED FILE, DO NOT EDIT. -import '../ffi_proxy.dart'; +import 'package:universal_ffi/ffi.dart'; import 'spine_dart_bindings_generated.dart'; import '../spine_bindings.dart'; import 'physics_constraint_timeline.dart'; diff --git a/spine-flutter/lib/generated/physics_constraint_data.dart b/spine-flutter/lib/generated/physics_constraint_data.dart index 035c6d32a..8c70bc294 100644 --- a/spine-flutter/lib/generated/physics_constraint_data.dart +++ b/spine-flutter/lib/generated/physics_constraint_data.dart @@ -29,7 +29,8 @@ // AUTO GENERATED FILE, DO NOT EDIT. -import '../ffi_proxy.dart'; +import 'package:universal_ffi/ffi.dart'; +import 'package:universal_ffi/ffi_utils.dart'; import 'spine_dart_bindings_generated.dart'; import '../spine_bindings.dart'; import 'rtti.dart'; diff --git a/spine-flutter/lib/generated/physics_constraint_gravity_timeline.dart b/spine-flutter/lib/generated/physics_constraint_gravity_timeline.dart index 2745dd256..c3d51a3b6 100644 --- a/spine-flutter/lib/generated/physics_constraint_gravity_timeline.dart +++ b/spine-flutter/lib/generated/physics_constraint_gravity_timeline.dart @@ -29,7 +29,7 @@ // AUTO GENERATED FILE, DO NOT EDIT. -import '../ffi_proxy.dart'; +import 'package:universal_ffi/ffi.dart'; import 'spine_dart_bindings_generated.dart'; import '../spine_bindings.dart'; import 'physics_constraint_timeline.dart'; diff --git a/spine-flutter/lib/generated/physics_constraint_inertia_timeline.dart b/spine-flutter/lib/generated/physics_constraint_inertia_timeline.dart index 5c1c33205..dc7bd68bc 100644 --- a/spine-flutter/lib/generated/physics_constraint_inertia_timeline.dart +++ b/spine-flutter/lib/generated/physics_constraint_inertia_timeline.dart @@ -29,7 +29,7 @@ // AUTO GENERATED FILE, DO NOT EDIT. -import '../ffi_proxy.dart'; +import 'package:universal_ffi/ffi.dart'; import 'spine_dart_bindings_generated.dart'; import '../spine_bindings.dart'; import 'physics_constraint_timeline.dart'; diff --git a/spine-flutter/lib/generated/physics_constraint_mass_timeline.dart b/spine-flutter/lib/generated/physics_constraint_mass_timeline.dart index ad1ce0020..6cf410f56 100644 --- a/spine-flutter/lib/generated/physics_constraint_mass_timeline.dart +++ b/spine-flutter/lib/generated/physics_constraint_mass_timeline.dart @@ -29,7 +29,7 @@ // AUTO GENERATED FILE, DO NOT EDIT. -import '../ffi_proxy.dart'; +import 'package:universal_ffi/ffi.dart'; import 'spine_dart_bindings_generated.dart'; import '../spine_bindings.dart'; import 'physics_constraint_timeline.dart'; diff --git a/spine-flutter/lib/generated/physics_constraint_mix_timeline.dart b/spine-flutter/lib/generated/physics_constraint_mix_timeline.dart index fe66c1663..577392ed6 100644 --- a/spine-flutter/lib/generated/physics_constraint_mix_timeline.dart +++ b/spine-flutter/lib/generated/physics_constraint_mix_timeline.dart @@ -29,7 +29,7 @@ // AUTO GENERATED FILE, DO NOT EDIT. -import '../ffi_proxy.dart'; +import 'package:universal_ffi/ffi.dart'; import 'spine_dart_bindings_generated.dart'; import '../spine_bindings.dart'; import 'physics_constraint_timeline.dart'; diff --git a/spine-flutter/lib/generated/physics_constraint_pose.dart b/spine-flutter/lib/generated/physics_constraint_pose.dart index eec71411e..dad361b9e 100644 --- a/spine-flutter/lib/generated/physics_constraint_pose.dart +++ b/spine-flutter/lib/generated/physics_constraint_pose.dart @@ -29,7 +29,7 @@ // AUTO GENERATED FILE, DO NOT EDIT. -import '../ffi_proxy.dart'; +import 'package:universal_ffi/ffi.dart'; import 'spine_dart_bindings_generated.dart'; import '../spine_bindings.dart'; diff --git a/spine-flutter/lib/generated/physics_constraint_reset_timeline.dart b/spine-flutter/lib/generated/physics_constraint_reset_timeline.dart index 487882a30..81f829c12 100644 --- a/spine-flutter/lib/generated/physics_constraint_reset_timeline.dart +++ b/spine-flutter/lib/generated/physics_constraint_reset_timeline.dart @@ -29,7 +29,7 @@ // AUTO GENERATED FILE, DO NOT EDIT. -import '../ffi_proxy.dart'; +import 'package:universal_ffi/ffi.dart'; import 'spine_dart_bindings_generated.dart'; import '../spine_bindings.dart'; import 'constraint_timeline.dart'; diff --git a/spine-flutter/lib/generated/physics_constraint_strength_timeline.dart b/spine-flutter/lib/generated/physics_constraint_strength_timeline.dart index 7bc7dd3ae..e6dd278cb 100644 --- a/spine-flutter/lib/generated/physics_constraint_strength_timeline.dart +++ b/spine-flutter/lib/generated/physics_constraint_strength_timeline.dart @@ -29,7 +29,7 @@ // AUTO GENERATED FILE, DO NOT EDIT. -import '../ffi_proxy.dart'; +import 'package:universal_ffi/ffi.dart'; import 'spine_dart_bindings_generated.dart'; import '../spine_bindings.dart'; import 'physics_constraint_timeline.dart'; diff --git a/spine-flutter/lib/generated/physics_constraint_timeline.dart b/spine-flutter/lib/generated/physics_constraint_timeline.dart index 69e4d401f..cff2d6ee0 100644 --- a/spine-flutter/lib/generated/physics_constraint_timeline.dart +++ b/spine-flutter/lib/generated/physics_constraint_timeline.dart @@ -29,7 +29,7 @@ // AUTO GENERATED FILE, DO NOT EDIT. -import '../ffi_proxy.dart'; +import 'package:universal_ffi/ffi.dart'; import 'spine_dart_bindings_generated.dart'; import '../spine_bindings.dart'; import 'constraint_timeline.dart'; diff --git a/spine-flutter/lib/generated/physics_constraint_wind_timeline.dart b/spine-flutter/lib/generated/physics_constraint_wind_timeline.dart index 8af801df8..fb9632f5c 100644 --- a/spine-flutter/lib/generated/physics_constraint_wind_timeline.dart +++ b/spine-flutter/lib/generated/physics_constraint_wind_timeline.dart @@ -29,7 +29,7 @@ // AUTO GENERATED FILE, DO NOT EDIT. -import '../ffi_proxy.dart'; +import 'package:universal_ffi/ffi.dart'; import 'spine_dart_bindings_generated.dart'; import '../spine_bindings.dart'; import 'physics_constraint_timeline.dart'; diff --git a/spine-flutter/lib/generated/point_attachment.dart b/spine-flutter/lib/generated/point_attachment.dart index d271cb7e6..f269a875b 100644 --- a/spine-flutter/lib/generated/point_attachment.dart +++ b/spine-flutter/lib/generated/point_attachment.dart @@ -29,7 +29,8 @@ // AUTO GENERATED FILE, DO NOT EDIT. -import '../ffi_proxy.dart'; +import 'package:universal_ffi/ffi.dart'; +import 'package:universal_ffi/ffi_utils.dart'; import 'spine_dart_bindings_generated.dart'; import '../spine_bindings.dart'; import 'attachment.dart'; diff --git a/spine-flutter/lib/generated/polygon.dart b/spine-flutter/lib/generated/polygon.dart index 6ba9b2d74..c06d7786a 100644 --- a/spine-flutter/lib/generated/polygon.dart +++ b/spine-flutter/lib/generated/polygon.dart @@ -29,7 +29,7 @@ // AUTO GENERATED FILE, DO NOT EDIT. -import '../ffi_proxy.dart'; +import 'package:universal_ffi/ffi.dart'; import 'spine_dart_bindings_generated.dart'; import '../spine_bindings.dart'; import 'arrays.dart'; diff --git a/spine-flutter/lib/generated/posed.dart b/spine-flutter/lib/generated/posed.dart index 3a52136e7..52c479428 100644 --- a/spine-flutter/lib/generated/posed.dart +++ b/spine-flutter/lib/generated/posed.dart @@ -29,7 +29,7 @@ // AUTO GENERATED FILE, DO NOT EDIT. -import '../ffi_proxy.dart'; +import 'package:universal_ffi/ffi.dart'; /// Posed wrapper abstract class Posed { diff --git a/spine-flutter/lib/generated/posed_active.dart b/spine-flutter/lib/generated/posed_active.dart index 55f5183f9..06cb3db6a 100644 --- a/spine-flutter/lib/generated/posed_active.dart +++ b/spine-flutter/lib/generated/posed_active.dart @@ -29,7 +29,7 @@ // AUTO GENERATED FILE, DO NOT EDIT. -import '../ffi_proxy.dart'; +import 'package:universal_ffi/ffi.dart'; import 'spine_dart_bindings_generated.dart'; import '../spine_bindings.dart'; diff --git a/spine-flutter/lib/generated/posed_data.dart b/spine-flutter/lib/generated/posed_data.dart index 294c0610a..8a58ad7ef 100644 --- a/spine-flutter/lib/generated/posed_data.dart +++ b/spine-flutter/lib/generated/posed_data.dart @@ -29,7 +29,8 @@ // AUTO GENERATED FILE, DO NOT EDIT. -import '../ffi_proxy.dart'; +import 'package:universal_ffi/ffi.dart'; +import 'package:universal_ffi/ffi_utils.dart'; import 'spine_dart_bindings_generated.dart'; import '../spine_bindings.dart'; diff --git a/spine-flutter/lib/generated/region_attachment.dart b/spine-flutter/lib/generated/region_attachment.dart index a6b7167ff..a8a2e3a3d 100644 --- a/spine-flutter/lib/generated/region_attachment.dart +++ b/spine-flutter/lib/generated/region_attachment.dart @@ -29,7 +29,8 @@ // AUTO GENERATED FILE, DO NOT EDIT. -import '../ffi_proxy.dart'; +import 'package:universal_ffi/ffi.dart'; +import 'package:universal_ffi/ffi_utils.dart'; import 'spine_dart_bindings_generated.dart'; import '../spine_bindings.dart'; import 'arrays.dart'; diff --git a/spine-flutter/lib/generated/render_command.dart b/spine-flutter/lib/generated/render_command.dart index 4e27cf4cb..e69e60247 100644 --- a/spine-flutter/lib/generated/render_command.dart +++ b/spine-flutter/lib/generated/render_command.dart @@ -29,7 +29,7 @@ // AUTO GENERATED FILE, DO NOT EDIT. -import '../ffi_proxy.dart'; +import 'package:universal_ffi/ffi.dart'; import 'spine_dart_bindings_generated.dart'; import '../spine_bindings.dart'; import 'blend_mode.dart'; diff --git a/spine-flutter/lib/generated/rgb2_timeline.dart b/spine-flutter/lib/generated/rgb2_timeline.dart index c9e2f1138..714cac2ec 100644 --- a/spine-flutter/lib/generated/rgb2_timeline.dart +++ b/spine-flutter/lib/generated/rgb2_timeline.dart @@ -29,7 +29,7 @@ // AUTO GENERATED FILE, DO NOT EDIT. -import '../ffi_proxy.dart'; +import 'package:universal_ffi/ffi.dart'; import 'spine_dart_bindings_generated.dart'; import '../spine_bindings.dart'; import 'slot_curve_timeline.dart'; diff --git a/spine-flutter/lib/generated/rgb_timeline.dart b/spine-flutter/lib/generated/rgb_timeline.dart index 54716707a..dff9a20c8 100644 --- a/spine-flutter/lib/generated/rgb_timeline.dart +++ b/spine-flutter/lib/generated/rgb_timeline.dart @@ -29,7 +29,7 @@ // AUTO GENERATED FILE, DO NOT EDIT. -import '../ffi_proxy.dart'; +import 'package:universal_ffi/ffi.dart'; import 'spine_dart_bindings_generated.dart'; import '../spine_bindings.dart'; import 'slot_curve_timeline.dart'; diff --git a/spine-flutter/lib/generated/rgba2_timeline.dart b/spine-flutter/lib/generated/rgba2_timeline.dart index 21fb1bb8c..a50383785 100644 --- a/spine-flutter/lib/generated/rgba2_timeline.dart +++ b/spine-flutter/lib/generated/rgba2_timeline.dart @@ -29,7 +29,7 @@ // AUTO GENERATED FILE, DO NOT EDIT. -import '../ffi_proxy.dart'; +import 'package:universal_ffi/ffi.dart'; import 'spine_dart_bindings_generated.dart'; import '../spine_bindings.dart'; import 'slot_curve_timeline.dart'; diff --git a/spine-flutter/lib/generated/rgba_timeline.dart b/spine-flutter/lib/generated/rgba_timeline.dart index 976601828..57227181f 100644 --- a/spine-flutter/lib/generated/rgba_timeline.dart +++ b/spine-flutter/lib/generated/rgba_timeline.dart @@ -29,7 +29,7 @@ // AUTO GENERATED FILE, DO NOT EDIT. -import '../ffi_proxy.dart'; +import 'package:universal_ffi/ffi.dart'; import 'spine_dart_bindings_generated.dart'; import '../spine_bindings.dart'; import 'slot_curve_timeline.dart'; diff --git a/spine-flutter/lib/generated/rotate_timeline.dart b/spine-flutter/lib/generated/rotate_timeline.dart index 82c3e53ab..b56e89ef5 100644 --- a/spine-flutter/lib/generated/rotate_timeline.dart +++ b/spine-flutter/lib/generated/rotate_timeline.dart @@ -29,7 +29,7 @@ // AUTO GENERATED FILE, DO NOT EDIT. -import '../ffi_proxy.dart'; +import 'package:universal_ffi/ffi.dart'; import 'spine_dart_bindings_generated.dart'; import '../spine_bindings.dart'; import 'bone_timeline1.dart'; diff --git a/spine-flutter/lib/generated/rtti.dart b/spine-flutter/lib/generated/rtti.dart index b1aa0f4d6..d0ffb71bf 100644 --- a/spine-flutter/lib/generated/rtti.dart +++ b/spine-flutter/lib/generated/rtti.dart @@ -29,7 +29,8 @@ // AUTO GENERATED FILE, DO NOT EDIT. -import '../ffi_proxy.dart'; +import 'package:universal_ffi/ffi.dart'; +import 'package:universal_ffi/ffi_utils.dart'; import 'spine_dart_bindings_generated.dart'; import '../spine_bindings.dart'; diff --git a/spine-flutter/lib/generated/scale_timeline.dart b/spine-flutter/lib/generated/scale_timeline.dart index 4ea788607..4030c3716 100644 --- a/spine-flutter/lib/generated/scale_timeline.dart +++ b/spine-flutter/lib/generated/scale_timeline.dart @@ -29,7 +29,7 @@ // AUTO GENERATED FILE, DO NOT EDIT. -import '../ffi_proxy.dart'; +import 'package:universal_ffi/ffi.dart'; import 'spine_dart_bindings_generated.dart'; import '../spine_bindings.dart'; import 'bone_timeline2.dart'; diff --git a/spine-flutter/lib/generated/scale_x_timeline.dart b/spine-flutter/lib/generated/scale_x_timeline.dart index 47c6f9d60..3754ef20a 100644 --- a/spine-flutter/lib/generated/scale_x_timeline.dart +++ b/spine-flutter/lib/generated/scale_x_timeline.dart @@ -29,7 +29,7 @@ // AUTO GENERATED FILE, DO NOT EDIT. -import '../ffi_proxy.dart'; +import 'package:universal_ffi/ffi.dart'; import 'spine_dart_bindings_generated.dart'; import '../spine_bindings.dart'; import 'bone_timeline1.dart'; diff --git a/spine-flutter/lib/generated/scale_y_timeline.dart b/spine-flutter/lib/generated/scale_y_timeline.dart index db0189d55..34ec13159 100644 --- a/spine-flutter/lib/generated/scale_y_timeline.dart +++ b/spine-flutter/lib/generated/scale_y_timeline.dart @@ -29,7 +29,7 @@ // AUTO GENERATED FILE, DO NOT EDIT. -import '../ffi_proxy.dart'; +import 'package:universal_ffi/ffi.dart'; import 'spine_dart_bindings_generated.dart'; import '../spine_bindings.dart'; import 'bone_timeline1.dart'; diff --git a/spine-flutter/lib/generated/sequence.dart b/spine-flutter/lib/generated/sequence.dart index c55f4f0c5..987f3fad2 100644 --- a/spine-flutter/lib/generated/sequence.dart +++ b/spine-flutter/lib/generated/sequence.dart @@ -29,7 +29,8 @@ // AUTO GENERATED FILE, DO NOT EDIT. -import '../ffi_proxy.dart'; +import 'package:universal_ffi/ffi.dart'; +import 'package:universal_ffi/ffi_utils.dart'; import 'spine_dart_bindings_generated.dart'; import '../spine_bindings.dart'; import 'arrays.dart'; diff --git a/spine-flutter/lib/generated/sequence_timeline.dart b/spine-flutter/lib/generated/sequence_timeline.dart index 9c1666c8f..b6c6bfe40 100644 --- a/spine-flutter/lib/generated/sequence_timeline.dart +++ b/spine-flutter/lib/generated/sequence_timeline.dart @@ -29,7 +29,8 @@ // AUTO GENERATED FILE, DO NOT EDIT. -import '../ffi_proxy.dart'; +import 'package:universal_ffi/ffi.dart'; +import 'package:universal_ffi/ffi_utils.dart'; import 'spine_dart_bindings_generated.dart'; import '../spine_bindings.dart'; import 'attachment.dart'; diff --git a/spine-flutter/lib/generated/shear_timeline.dart b/spine-flutter/lib/generated/shear_timeline.dart index 768a58bea..0af9f9d79 100644 --- a/spine-flutter/lib/generated/shear_timeline.dart +++ b/spine-flutter/lib/generated/shear_timeline.dart @@ -29,7 +29,7 @@ // AUTO GENERATED FILE, DO NOT EDIT. -import '../ffi_proxy.dart'; +import 'package:universal_ffi/ffi.dart'; import 'spine_dart_bindings_generated.dart'; import '../spine_bindings.dart'; import 'bone_timeline2.dart'; diff --git a/spine-flutter/lib/generated/shear_x_timeline.dart b/spine-flutter/lib/generated/shear_x_timeline.dart index ce55c61ab..a215dc4cd 100644 --- a/spine-flutter/lib/generated/shear_x_timeline.dart +++ b/spine-flutter/lib/generated/shear_x_timeline.dart @@ -29,7 +29,7 @@ // AUTO GENERATED FILE, DO NOT EDIT. -import '../ffi_proxy.dart'; +import 'package:universal_ffi/ffi.dart'; import 'spine_dart_bindings_generated.dart'; import '../spine_bindings.dart'; import 'bone_timeline1.dart'; diff --git a/spine-flutter/lib/generated/shear_y_timeline.dart b/spine-flutter/lib/generated/shear_y_timeline.dart index 17637a3f2..330f27362 100644 --- a/spine-flutter/lib/generated/shear_y_timeline.dart +++ b/spine-flutter/lib/generated/shear_y_timeline.dart @@ -29,7 +29,7 @@ // AUTO GENERATED FILE, DO NOT EDIT. -import '../ffi_proxy.dart'; +import 'package:universal_ffi/ffi.dart'; import 'spine_dart_bindings_generated.dart'; import '../spine_bindings.dart'; import 'bone_timeline1.dart'; diff --git a/spine-flutter/lib/generated/skeleton.dart b/spine-flutter/lib/generated/skeleton.dart index 08c5293e1..fae0ff3f0 100644 --- a/spine-flutter/lib/generated/skeleton.dart +++ b/spine-flutter/lib/generated/skeleton.dart @@ -29,7 +29,8 @@ // AUTO GENERATED FILE, DO NOT EDIT. -import '../ffi_proxy.dart'; +import 'package:universal_ffi/ffi.dart'; +import 'package:universal_ffi/ffi_utils.dart'; import 'spine_dart_bindings_generated.dart'; import '../spine_bindings.dart'; import 'arrays.dart'; diff --git a/spine-flutter/lib/generated/skeleton_binary.dart b/spine-flutter/lib/generated/skeleton_binary.dart index 356ae474e..820ba7b95 100644 --- a/spine-flutter/lib/generated/skeleton_binary.dart +++ b/spine-flutter/lib/generated/skeleton_binary.dart @@ -29,7 +29,8 @@ // AUTO GENERATED FILE, DO NOT EDIT. -import '../ffi_proxy.dart'; +import 'package:universal_ffi/ffi.dart'; +import 'package:universal_ffi/ffi_utils.dart'; import 'spine_dart_bindings_generated.dart'; import '../spine_bindings.dart'; import 'atlas.dart'; diff --git a/spine-flutter/lib/generated/skeleton_bounds.dart b/spine-flutter/lib/generated/skeleton_bounds.dart index 30332ee23..5bc69672f 100644 --- a/spine-flutter/lib/generated/skeleton_bounds.dart +++ b/spine-flutter/lib/generated/skeleton_bounds.dart @@ -29,7 +29,7 @@ // AUTO GENERATED FILE, DO NOT EDIT. -import '../ffi_proxy.dart'; +import 'package:universal_ffi/ffi.dart'; import 'spine_dart_bindings_generated.dart'; import '../spine_bindings.dart'; import 'arrays.dart'; diff --git a/spine-flutter/lib/generated/skeleton_clipping.dart b/spine-flutter/lib/generated/skeleton_clipping.dart index 9e8b8cdf5..1109a88df 100644 --- a/spine-flutter/lib/generated/skeleton_clipping.dart +++ b/spine-flutter/lib/generated/skeleton_clipping.dart @@ -29,7 +29,7 @@ // AUTO GENERATED FILE, DO NOT EDIT. -import '../ffi_proxy.dart'; +import 'package:universal_ffi/ffi.dart'; import 'spine_dart_bindings_generated.dart'; import '../spine_bindings.dart'; import 'arrays.dart'; diff --git a/spine-flutter/lib/generated/skeleton_data.dart b/spine-flutter/lib/generated/skeleton_data.dart index e5bca8030..d82386827 100644 --- a/spine-flutter/lib/generated/skeleton_data.dart +++ b/spine-flutter/lib/generated/skeleton_data.dart @@ -29,7 +29,8 @@ // AUTO GENERATED FILE, DO NOT EDIT. -import '../ffi_proxy.dart'; +import 'package:universal_ffi/ffi.dart'; +import 'package:universal_ffi/ffi_utils.dart'; import 'spine_dart_bindings_generated.dart'; import '../spine_bindings.dart'; import 'animation.dart'; diff --git a/spine-flutter/lib/generated/skeleton_json.dart b/spine-flutter/lib/generated/skeleton_json.dart index d69026c6f..c7d10b4dc 100644 --- a/spine-flutter/lib/generated/skeleton_json.dart +++ b/spine-flutter/lib/generated/skeleton_json.dart @@ -29,7 +29,8 @@ // AUTO GENERATED FILE, DO NOT EDIT. -import '../ffi_proxy.dart'; +import 'package:universal_ffi/ffi.dart'; +import 'package:universal_ffi/ffi_utils.dart'; import 'spine_dart_bindings_generated.dart'; import '../spine_bindings.dart'; import 'atlas.dart'; diff --git a/spine-flutter/lib/generated/skeleton_renderer.dart b/spine-flutter/lib/generated/skeleton_renderer.dart index e8dc7f6e3..c604c6d4f 100644 --- a/spine-flutter/lib/generated/skeleton_renderer.dart +++ b/spine-flutter/lib/generated/skeleton_renderer.dart @@ -29,7 +29,7 @@ // AUTO GENERATED FILE, DO NOT EDIT. -import '../ffi_proxy.dart'; +import 'package:universal_ffi/ffi.dart'; import 'spine_dart_bindings_generated.dart'; import '../spine_bindings.dart'; import 'render_command.dart'; diff --git a/spine-flutter/lib/generated/skin.dart b/spine-flutter/lib/generated/skin.dart index 0ba10e558..fb50a375b 100644 --- a/spine-flutter/lib/generated/skin.dart +++ b/spine-flutter/lib/generated/skin.dart @@ -29,7 +29,8 @@ // AUTO GENERATED FILE, DO NOT EDIT. -import '../ffi_proxy.dart'; +import 'package:universal_ffi/ffi.dart'; +import 'package:universal_ffi/ffi_utils.dart'; import 'spine_dart_bindings_generated.dart'; import '../spine_bindings.dart'; import 'arrays.dart'; diff --git a/spine-flutter/lib/generated/slider.dart b/spine-flutter/lib/generated/slider.dart index 19144e378..17d0c1bc4 100644 --- a/spine-flutter/lib/generated/slider.dart +++ b/spine-flutter/lib/generated/slider.dart @@ -29,7 +29,7 @@ // AUTO GENERATED FILE, DO NOT EDIT. -import '../ffi_proxy.dart'; +import 'package:universal_ffi/ffi.dart'; import 'spine_dart_bindings_generated.dart'; import '../spine_bindings.dart'; import 'rtti.dart'; diff --git a/spine-flutter/lib/generated/slider_data.dart b/spine-flutter/lib/generated/slider_data.dart index 1bcc69e15..6181928c6 100644 --- a/spine-flutter/lib/generated/slider_data.dart +++ b/spine-flutter/lib/generated/slider_data.dart @@ -29,7 +29,8 @@ // AUTO GENERATED FILE, DO NOT EDIT. -import '../ffi_proxy.dart'; +import 'package:universal_ffi/ffi.dart'; +import 'package:universal_ffi/ffi_utils.dart'; import 'spine_dart_bindings_generated.dart'; import '../spine_bindings.dart'; import 'rtti.dart'; diff --git a/spine-flutter/lib/generated/slider_mix_timeline.dart b/spine-flutter/lib/generated/slider_mix_timeline.dart index 2c0ab30e5..af006ce99 100644 --- a/spine-flutter/lib/generated/slider_mix_timeline.dart +++ b/spine-flutter/lib/generated/slider_mix_timeline.dart @@ -29,7 +29,7 @@ // AUTO GENERATED FILE, DO NOT EDIT. -import '../ffi_proxy.dart'; +import 'package:universal_ffi/ffi.dart'; import 'spine_dart_bindings_generated.dart'; import '../spine_bindings.dart'; import 'constraint_timeline1.dart'; diff --git a/spine-flutter/lib/generated/slider_pose.dart b/spine-flutter/lib/generated/slider_pose.dart index 862bbf486..12f3ce875 100644 --- a/spine-flutter/lib/generated/slider_pose.dart +++ b/spine-flutter/lib/generated/slider_pose.dart @@ -29,7 +29,7 @@ // AUTO GENERATED FILE, DO NOT EDIT. -import '../ffi_proxy.dart'; +import 'package:universal_ffi/ffi.dart'; import 'spine_dart_bindings_generated.dart'; import '../spine_bindings.dart'; diff --git a/spine-flutter/lib/generated/slider_timeline.dart b/spine-flutter/lib/generated/slider_timeline.dart index beb02cdb9..771ea9822 100644 --- a/spine-flutter/lib/generated/slider_timeline.dart +++ b/spine-flutter/lib/generated/slider_timeline.dart @@ -29,7 +29,7 @@ // AUTO GENERATED FILE, DO NOT EDIT. -import '../ffi_proxy.dart'; +import 'package:universal_ffi/ffi.dart'; import 'spine_dart_bindings_generated.dart'; import '../spine_bindings.dart'; import 'constraint_timeline1.dart'; diff --git a/spine-flutter/lib/generated/slot.dart b/spine-flutter/lib/generated/slot.dart index 2bf75c176..28e7850e1 100644 --- a/spine-flutter/lib/generated/slot.dart +++ b/spine-flutter/lib/generated/slot.dart @@ -29,7 +29,7 @@ // AUTO GENERATED FILE, DO NOT EDIT. -import '../ffi_proxy.dart'; +import 'package:universal_ffi/ffi.dart'; import 'spine_dart_bindings_generated.dart'; import '../spine_bindings.dart'; import 'bone.dart'; diff --git a/spine-flutter/lib/generated/slot_curve_timeline.dart b/spine-flutter/lib/generated/slot_curve_timeline.dart index fbf5c453c..3e6257bdd 100644 --- a/spine-flutter/lib/generated/slot_curve_timeline.dart +++ b/spine-flutter/lib/generated/slot_curve_timeline.dart @@ -29,7 +29,7 @@ // AUTO GENERATED FILE, DO NOT EDIT. -import '../ffi_proxy.dart'; +import 'package:universal_ffi/ffi.dart'; import 'spine_dart_bindings_generated.dart'; import '../spine_bindings.dart'; import 'curve_timeline.dart'; diff --git a/spine-flutter/lib/generated/slot_data.dart b/spine-flutter/lib/generated/slot_data.dart index 9b756d20b..07630fcdb 100644 --- a/spine-flutter/lib/generated/slot_data.dart +++ b/spine-flutter/lib/generated/slot_data.dart @@ -29,7 +29,8 @@ // AUTO GENERATED FILE, DO NOT EDIT. -import '../ffi_proxy.dart'; +import 'package:universal_ffi/ffi.dart'; +import 'package:universal_ffi/ffi_utils.dart'; import 'spine_dart_bindings_generated.dart'; import '../spine_bindings.dart'; import 'blend_mode.dart'; diff --git a/spine-flutter/lib/generated/slot_pose.dart b/spine-flutter/lib/generated/slot_pose.dart index 0037c09ef..165528409 100644 --- a/spine-flutter/lib/generated/slot_pose.dart +++ b/spine-flutter/lib/generated/slot_pose.dart @@ -29,7 +29,8 @@ // AUTO GENERATED FILE, DO NOT EDIT. -import '../ffi_proxy.dart'; +import 'package:universal_ffi/ffi.dart'; +import 'package:universal_ffi/ffi_utils.dart'; import 'spine_dart_bindings_generated.dart'; import '../spine_bindings.dart'; import 'arrays.dart'; diff --git a/spine-flutter/lib/generated/slot_timeline.dart b/spine-flutter/lib/generated/slot_timeline.dart index 7bd30e184..407abd3f7 100644 --- a/spine-flutter/lib/generated/slot_timeline.dart +++ b/spine-flutter/lib/generated/slot_timeline.dart @@ -29,7 +29,7 @@ // AUTO GENERATED FILE, DO NOT EDIT. -import '../ffi_proxy.dart'; +import 'package:universal_ffi/ffi.dart'; import '../spine_bindings.dart'; import 'rtti.dart'; diff --git a/spine-flutter/lib/generated/spine_dart_bindings_generated.dart b/spine-flutter/lib/generated/spine_dart_bindings_generated.dart index 3e1cdc417..8ec01d74e 100644 --- a/spine-flutter/lib/generated/spine_dart_bindings_generated.dart +++ b/spine-flutter/lib/generated/spine_dart_bindings_generated.dart @@ -6,7 +6,7 @@ // // Generated by `package:ffigen`. // ignore_for_file: type=lint -import '../ffi_proxy.dart' as ffi; +import 'package:universal_ffi/ffi.dart' as ffi; /// Bindings for Spine C headers. /// diff --git a/spine-flutter/lib/generated/texture_region.dart b/spine-flutter/lib/generated/texture_region.dart index 3df91d574..69731611b 100644 --- a/spine-flutter/lib/generated/texture_region.dart +++ b/spine-flutter/lib/generated/texture_region.dart @@ -29,7 +29,7 @@ // AUTO GENERATED FILE, DO NOT EDIT. -import '../ffi_proxy.dart'; +import 'package:universal_ffi/ffi.dart'; import 'spine_dart_bindings_generated.dart'; import '../spine_bindings.dart'; import 'rtti.dart'; diff --git a/spine-flutter/lib/generated/timeline.dart b/spine-flutter/lib/generated/timeline.dart index 9d5cdbebf..e7be3310e 100644 --- a/spine-flutter/lib/generated/timeline.dart +++ b/spine-flutter/lib/generated/timeline.dart @@ -29,7 +29,7 @@ // AUTO GENERATED FILE, DO NOT EDIT. -import '../ffi_proxy.dart'; +import 'package:universal_ffi/ffi.dart'; import 'spine_dart_bindings_generated.dart'; import '../spine_bindings.dart'; import 'rtti.dart'; diff --git a/spine-flutter/lib/generated/to_property.dart b/spine-flutter/lib/generated/to_property.dart index d64ad7291..80f5e6684 100644 --- a/spine-flutter/lib/generated/to_property.dart +++ b/spine-flutter/lib/generated/to_property.dart @@ -29,7 +29,7 @@ // AUTO GENERATED FILE, DO NOT EDIT. -import '../ffi_proxy.dart'; +import 'package:universal_ffi/ffi.dart'; import 'spine_dart_bindings_generated.dart'; import '../spine_bindings.dart'; import 'rtti.dart'; diff --git a/spine-flutter/lib/generated/to_rotate.dart b/spine-flutter/lib/generated/to_rotate.dart index e56f37155..1f28f9201 100644 --- a/spine-flutter/lib/generated/to_rotate.dart +++ b/spine-flutter/lib/generated/to_rotate.dart @@ -29,7 +29,7 @@ // AUTO GENERATED FILE, DO NOT EDIT. -import '../ffi_proxy.dart'; +import 'package:universal_ffi/ffi.dart'; import 'spine_dart_bindings_generated.dart'; import '../spine_bindings.dart'; import 'to_property.dart'; diff --git a/spine-flutter/lib/generated/to_scale_x.dart b/spine-flutter/lib/generated/to_scale_x.dart index c4697d049..07de52b20 100644 --- a/spine-flutter/lib/generated/to_scale_x.dart +++ b/spine-flutter/lib/generated/to_scale_x.dart @@ -29,7 +29,7 @@ // AUTO GENERATED FILE, DO NOT EDIT. -import '../ffi_proxy.dart'; +import 'package:universal_ffi/ffi.dart'; import 'spine_dart_bindings_generated.dart'; import '../spine_bindings.dart'; import 'to_property.dart'; diff --git a/spine-flutter/lib/generated/to_scale_y.dart b/spine-flutter/lib/generated/to_scale_y.dart index f472dd5cf..153e44c20 100644 --- a/spine-flutter/lib/generated/to_scale_y.dart +++ b/spine-flutter/lib/generated/to_scale_y.dart @@ -29,7 +29,7 @@ // AUTO GENERATED FILE, DO NOT EDIT. -import '../ffi_proxy.dart'; +import 'package:universal_ffi/ffi.dart'; import 'spine_dart_bindings_generated.dart'; import '../spine_bindings.dart'; import 'to_property.dart'; diff --git a/spine-flutter/lib/generated/to_shear_y.dart b/spine-flutter/lib/generated/to_shear_y.dart index af8f41f15..be812e806 100644 --- a/spine-flutter/lib/generated/to_shear_y.dart +++ b/spine-flutter/lib/generated/to_shear_y.dart @@ -29,7 +29,7 @@ // AUTO GENERATED FILE, DO NOT EDIT. -import '../ffi_proxy.dart'; +import 'package:universal_ffi/ffi.dart'; import 'spine_dart_bindings_generated.dart'; import '../spine_bindings.dart'; import 'to_property.dart'; diff --git a/spine-flutter/lib/generated/to_x.dart b/spine-flutter/lib/generated/to_x.dart index db8172b56..140e11d91 100644 --- a/spine-flutter/lib/generated/to_x.dart +++ b/spine-flutter/lib/generated/to_x.dart @@ -29,7 +29,7 @@ // AUTO GENERATED FILE, DO NOT EDIT. -import '../ffi_proxy.dart'; +import 'package:universal_ffi/ffi.dart'; import 'spine_dart_bindings_generated.dart'; import '../spine_bindings.dart'; import 'to_property.dart'; diff --git a/spine-flutter/lib/generated/to_y.dart b/spine-flutter/lib/generated/to_y.dart index 85a4e8d2a..15d06ba4d 100644 --- a/spine-flutter/lib/generated/to_y.dart +++ b/spine-flutter/lib/generated/to_y.dart @@ -29,7 +29,7 @@ // AUTO GENERATED FILE, DO NOT EDIT. -import '../ffi_proxy.dart'; +import 'package:universal_ffi/ffi.dart'; import 'spine_dart_bindings_generated.dart'; import '../spine_bindings.dart'; import 'to_property.dart'; diff --git a/spine-flutter/lib/generated/track_entry.dart b/spine-flutter/lib/generated/track_entry.dart index bacd3b6cf..fef1a8000 100644 --- a/spine-flutter/lib/generated/track_entry.dart +++ b/spine-flutter/lib/generated/track_entry.dart @@ -29,7 +29,7 @@ // AUTO GENERATED FILE, DO NOT EDIT. -import '../ffi_proxy.dart'; +import 'package:universal_ffi/ffi.dart'; import 'spine_dart_bindings_generated.dart'; import '../spine_bindings.dart'; import 'animation.dart'; diff --git a/spine-flutter/lib/generated/transform_constraint.dart b/spine-flutter/lib/generated/transform_constraint.dart index 281390c3a..87c8f2e30 100644 --- a/spine-flutter/lib/generated/transform_constraint.dart +++ b/spine-flutter/lib/generated/transform_constraint.dart @@ -29,7 +29,7 @@ // AUTO GENERATED FILE, DO NOT EDIT. -import '../ffi_proxy.dart'; +import 'package:universal_ffi/ffi.dart'; import 'spine_dart_bindings_generated.dart'; import '../spine_bindings.dart'; import 'rtti.dart'; diff --git a/spine-flutter/lib/generated/transform_constraint_data.dart b/spine-flutter/lib/generated/transform_constraint_data.dart index c637f0a73..0570df044 100644 --- a/spine-flutter/lib/generated/transform_constraint_data.dart +++ b/spine-flutter/lib/generated/transform_constraint_data.dart @@ -29,7 +29,8 @@ // AUTO GENERATED FILE, DO NOT EDIT. -import '../ffi_proxy.dart'; +import 'package:universal_ffi/ffi.dart'; +import 'package:universal_ffi/ffi_utils.dart'; import 'spine_dart_bindings_generated.dart'; import '../spine_bindings.dart'; import 'rtti.dart'; diff --git a/spine-flutter/lib/generated/transform_constraint_pose.dart b/spine-flutter/lib/generated/transform_constraint_pose.dart index 365c5ff3c..f936d3ae3 100644 --- a/spine-flutter/lib/generated/transform_constraint_pose.dart +++ b/spine-flutter/lib/generated/transform_constraint_pose.dart @@ -29,7 +29,7 @@ // AUTO GENERATED FILE, DO NOT EDIT. -import '../ffi_proxy.dart'; +import 'package:universal_ffi/ffi.dart'; import 'spine_dart_bindings_generated.dart'; import '../spine_bindings.dart'; diff --git a/spine-flutter/lib/generated/transform_constraint_timeline.dart b/spine-flutter/lib/generated/transform_constraint_timeline.dart index 0fdad5fb1..0923b485b 100644 --- a/spine-flutter/lib/generated/transform_constraint_timeline.dart +++ b/spine-flutter/lib/generated/transform_constraint_timeline.dart @@ -29,7 +29,7 @@ // AUTO GENERATED FILE, DO NOT EDIT. -import '../ffi_proxy.dart'; +import 'package:universal_ffi/ffi.dart'; import 'spine_dart_bindings_generated.dart'; import '../spine_bindings.dart'; import 'constraint_timeline.dart'; diff --git a/spine-flutter/lib/generated/translate_timeline.dart b/spine-flutter/lib/generated/translate_timeline.dart index 68ef342f4..45c1ead8b 100644 --- a/spine-flutter/lib/generated/translate_timeline.dart +++ b/spine-flutter/lib/generated/translate_timeline.dart @@ -29,7 +29,7 @@ // AUTO GENERATED FILE, DO NOT EDIT. -import '../ffi_proxy.dart'; +import 'package:universal_ffi/ffi.dart'; import 'spine_dart_bindings_generated.dart'; import '../spine_bindings.dart'; import 'bone_timeline2.dart'; diff --git a/spine-flutter/lib/generated/translate_x_timeline.dart b/spine-flutter/lib/generated/translate_x_timeline.dart index 7c3a41844..a9a993e7a 100644 --- a/spine-flutter/lib/generated/translate_x_timeline.dart +++ b/spine-flutter/lib/generated/translate_x_timeline.dart @@ -29,7 +29,7 @@ // AUTO GENERATED FILE, DO NOT EDIT. -import '../ffi_proxy.dart'; +import 'package:universal_ffi/ffi.dart'; import 'spine_dart_bindings_generated.dart'; import '../spine_bindings.dart'; import 'bone_timeline1.dart'; diff --git a/spine-flutter/lib/generated/translate_y_timeline.dart b/spine-flutter/lib/generated/translate_y_timeline.dart index a24f2830c..a54f2925b 100644 --- a/spine-flutter/lib/generated/translate_y_timeline.dart +++ b/spine-flutter/lib/generated/translate_y_timeline.dart @@ -29,7 +29,7 @@ // AUTO GENERATED FILE, DO NOT EDIT. -import '../ffi_proxy.dart'; +import 'package:universal_ffi/ffi.dart'; import 'spine_dart_bindings_generated.dart'; import '../spine_bindings.dart'; import 'bone_timeline1.dart'; diff --git a/spine-flutter/lib/generated/update.dart b/spine-flutter/lib/generated/update.dart index f69648fc0..f8bdba181 100644 --- a/spine-flutter/lib/generated/update.dart +++ b/spine-flutter/lib/generated/update.dart @@ -29,7 +29,7 @@ // AUTO GENERATED FILE, DO NOT EDIT. -import '../ffi_proxy.dart'; +import 'package:universal_ffi/ffi.dart'; import '../spine_bindings.dart'; import 'rtti.dart'; import 'physics.dart'; diff --git a/spine-flutter/lib/generated/vertex_attachment.dart b/spine-flutter/lib/generated/vertex_attachment.dart index 833d04235..f28e4aa02 100644 --- a/spine-flutter/lib/generated/vertex_attachment.dart +++ b/spine-flutter/lib/generated/vertex_attachment.dart @@ -29,7 +29,8 @@ // AUTO GENERATED FILE, DO NOT EDIT. -import '../ffi_proxy.dart'; +import 'package:universal_ffi/ffi.dart'; +import 'package:universal_ffi/ffi_utils.dart'; import 'spine_dart_bindings_generated.dart'; import '../spine_bindings.dart'; import 'arrays.dart'; diff --git a/spine-flutter/lib/malloc_native.dart b/spine-flutter/lib/malloc_native.dart deleted file mode 100644 index 8b1378917..000000000 --- a/spine-flutter/lib/malloc_native.dart +++ /dev/null @@ -1 +0,0 @@ - diff --git a/spine-flutter/lib/malloc_web.dart b/spine-flutter/lib/malloc_web.dart deleted file mode 100644 index 30b68fdb5..000000000 --- a/spine-flutter/lib/malloc_web.dart +++ /dev/null @@ -1,13 +0,0 @@ -import 'package:wasm_ffi/ffi.dart'; -import 'spine_dart_init_web.dart'; - -/// Web implementation of malloc that uses the DynamicLibrary's allocator -/// The allocator will be available after spine is initialized -Allocator get malloc { - // Get the allocator from the current dylib - final dylib = dylibInstance; - if (dylib == null) { - throw StateError('DynamicLibrary is not initialized. Make sure spine is initialized before using malloc.'); - } - return dylib.allocator; -} diff --git a/spine-flutter/lib/native_array.dart b/spine-flutter/lib/native_array.dart index 6c389ba1b..37fa284be 100644 --- a/spine-flutter/lib/native_array.dart +++ b/spine-flutter/lib/native_array.dart @@ -27,7 +27,8 @@ // SPINE RUNTIMES, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // *****************************************************************************/ -import 'ffi_proxy.dart'; +import 'package:universal_ffi/ffi.dart'; +import 'package:universal_ffi/ffi_utils.dart'; import 'dart:collection'; /// Base class for native spine arrays. diff --git a/spine-flutter/lib/spine_dart.dart b/spine-flutter/lib/spine_dart.dart index fbb1436df..b5da4b42c 100644 --- a/spine-flutter/lib/spine_dart.dart +++ b/spine-flutter/lib/spine_dart.dart @@ -26,32 +26,34 @@ /// THE SPINE RUNTIMES, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. library; -import 'package:spine_flutter/generated/arrays.dart'; - -import 'generated/spine_dart_bindings_generated.dart'; -import 'spine_bindings.dart'; -import 'spine_dart_init.dart' if (dart.library.html) 'spine_dart_init_web.dart'; -import 'ffi_proxy.dart'; import 'dart:typed_data'; -import 'generated/atlas.dart'; -import 'generated/skeleton_data.dart'; -import 'generated/skin.dart'; -import 'generated/attachment.dart'; -import 'generated/region_attachment.dart'; -import 'generated/mesh_attachment.dart'; -import 'generated/bounding_box_attachment.dart'; -import 'generated/clipping_attachment.dart'; -import 'generated/path_attachment.dart'; -import 'generated/point_attachment.dart'; -import 'generated/skeleton.dart'; + +import 'package:spine_flutter/generated/arrays.dart'; +import 'package:universal_ffi/ffi.dart'; +import 'package:universal_ffi/ffi_utils.dart'; + import 'generated/animation_state.dart'; import 'generated/animation_state_data.dart'; -import 'generated/track_entry.dart'; +import 'generated/atlas.dart'; +import 'generated/attachment.dart'; +import 'generated/bone_pose.dart'; +import 'generated/bounding_box_attachment.dart'; +import 'generated/clipping_attachment.dart'; import 'generated/event.dart'; import 'generated/event_type.dart'; -import 'generated/render_command.dart'; +import 'generated/mesh_attachment.dart'; +import 'generated/path_attachment.dart'; import 'generated/physics.dart'; -import 'generated/bone_pose.dart'; +import 'generated/point_attachment.dart'; +import 'generated/region_attachment.dart'; +import 'generated/render_command.dart'; +import 'generated/skeleton.dart'; +import 'generated/skeleton_data.dart'; +import 'generated/skin.dart'; +import 'generated/spine_dart_bindings_generated.dart'; +import 'generated/track_entry.dart'; +import 'spine_bindings.dart'; +import 'spine_dart_init.dart' if (dart.library.html) 'spine_dart_init_web.dart'; // Export generated classes export 'generated/api.dart'; diff --git a/spine-flutter/lib/spine_dart_init.dart b/spine-flutter/lib/spine_dart_init.dart index 830ce5a3f..9263b7cfc 100644 --- a/spine-flutter/lib/spine_dart_init.dart +++ b/spine-flutter/lib/spine_dart_init.dart @@ -27,29 +27,12 @@ /// THE SPINE RUNTIMES, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. /// -import 'dart:ffi'; import 'dart:io'; -import 'package:ffi/ffi.dart'; +import 'package:universal_ffi/ffi.dart'; +import 'package:universal_ffi/ffi_utils.dart'; const String _libName = 'spine_flutter'; -final DynamicLibrary _dylib = () { - if (Platform.isMacOS || Platform.isIOS) { - try { - return DynamicLibrary.open('$_libName.framework/$_libName'); - } catch (e) { - // Fallback for macOS where the library might not be in a framework - return DynamicLibrary.open('$_libName.dylib'); - } - } - if (Platform.isAndroid || Platform.isLinux) { - return DynamicLibrary.open('lib$_libName.so'); - } - if (Platform.isWindows) { - return DynamicLibrary.open('$_libName.dll'); - } - throw UnsupportedError('Unknown platform: ${Platform.operatingSystem}'); -}(); class SpineDartFFI { DynamicLibrary dylib; @@ -58,10 +41,27 @@ class SpineDartFFI { SpineDartFFI(this.dylib, this.allocator); } +Future initDynamicLibrary() async { + if (Platform.isMacOS || Platform.isIOS) { + try { + return await DynamicLibrary.open('$_libName.framework/$_libName'); + } catch (e) { + // Fallback for macOS where the library might not be in a framework + return await DynamicLibrary.open('$_libName.dylib'); + } + } else if (Platform.isAndroid || Platform.isLinux) { + return await DynamicLibrary.open('lib$_libName.so'); + } else if (Platform.isWindows) { + return await DynamicLibrary.open('$_libName.dll'); + } else { + throw UnsupportedError('Unknown platform: ${Platform.operatingSystem}'); + } +} + Future initSpineDartFFI(bool useStaticLinkage) async { if (useStaticLinkage) { return SpineDartFFI(DynamicLibrary.process(), malloc); } else { - return SpineDartFFI(_dylib, malloc); + return SpineDartFFI(await initDynamicLibrary(), malloc); } } diff --git a/spine-flutter/lib/spine_dart_init_web.dart b/spine-flutter/lib/spine_dart_init_web.dart index b05b9e2cb..b527a768b 100644 --- a/spine-flutter/lib/spine_dart_init_web.dart +++ b/spine-flutter/lib/spine_dart_init_web.dart @@ -29,13 +29,10 @@ // AUTO GENERATED FILE, DO NOT EDIT. -// ignore_for_file: type_argument_not_matching_bounds -import 'package:flutter/services.dart'; -import 'package:wasm_ffi/ffi.dart'; +import 'package:universal_ffi/ffi.dart'; import 'generated/spine_dart_bindings_generated.dart'; -// Export this so malloc_web.dart can access it DynamicLibrary? dylibInstance; class SpineDartFFI { diff --git a/spine-flutter/lib/spine_flutter.dart b/spine-flutter/lib/spine_flutter.dart index 93c42e1b8..b9f90f5c4 100644 --- a/spine-flutter/lib/spine_flutter.dart +++ b/spine-flutter/lib/spine_flutter.dart @@ -5,11 +5,12 @@ export 'spine_widget.dart'; export 'raw_image_provider.dart'; import 'dart:convert' as convert; -import 'ffi_proxy.dart'; import 'dart:io' if (dart.library.html) 'io_stub.dart'; import 'dart:typed_data'; import 'dart:ui'; +import "package:universal_ffi/ffi.dart"; + import 'package:flutter/foundation.dart' show kIsWeb; import 'package:flutter/material.dart' as material; import 'package:flutter/rendering.dart' as rendering; diff --git a/spine-flutter/pubspec.yaml b/spine-flutter/pubspec.yaml index 0766b4413..93be35959 100644 --- a/spine-flutter/pubspec.yaml +++ b/spine-flutter/pubspec.yaml @@ -13,14 +13,13 @@ environment: dependencies: flutter: sdk: flutter - ffi: ^2.1.0 inject_js: ^2.0.0 js: ^0.6.5 meta: ^1.10.0 http: ^1.1.0 path: ^1.8.2 crypto: ^3.0.3 - wasm_ffi: ^2.0.7 + universal_ffi: ^1.1.3 dev_dependencies: ffigen: ^10.0.0 diff --git a/spine-flutter/test/pubspec.lock b/spine-flutter/test/pubspec.lock index 48d5305a5..bace73317 100644 --- a/spine-flutter/test/pubspec.lock +++ b/spine-flutter/test/pubspec.lock @@ -394,6 +394,14 @@ packages: url: "https://pub.dev" source: hosted version: "1.4.0" + universal_ffi: + dependency: transitive + description: + name: universal_ffi + sha256: "8f0e28bab34709e94541ff8c39d86294b686a6cc112561dd2aa071d4a4179609" + url: "https://pub.dev" + source: hosted + version: "1.1.3" vector_math: dependency: transitive description: @@ -410,6 +418,14 @@ packages: url: "https://pub.dev" source: hosted version: "15.0.2" + wasm_ffi: + dependency: transitive + description: + name: wasm_ffi + sha256: f4539052e4d80575bb4820c836a2d6400af061b71c1605af60ebfb30b7c5369a + url: "https://pub.dev" + source: hosted + version: "2.0.7" watcher: dependency: transitive description: