From 244abfb65aacadfba00082b8c2e75a8306edf85c Mon Sep 17 00:00:00 2001 From: Mario Zechner Date: Wed, 10 Sep 2025 21:22:35 +0200 Subject: [PATCH] [dart] Check C++ class name, not C type name in RTTI based instantiation, as that's what RTTI gives us as className. --- spine-flutter/codegen/src/dart-writer.ts | 4 +++- spine-flutter/test/skeleton_drawable_test.dart | 11 +++++++++++ 2 files changed, 14 insertions(+), 1 deletion(-) diff --git a/spine-flutter/codegen/src/dart-writer.ts b/spine-flutter/codegen/src/dart-writer.ts index aeaad450e..33fd4c9e7 100644 --- a/spine-flutter/codegen/src/dart-writer.ts +++ b/spine-flutter/codegen/src/dart-writer.ts @@ -1336,8 +1336,10 @@ ${declaration} {`; lines.push(`switch (className) {`); for (const subclass of concreteSubclasses) { + const cppClass = this.classMap.get(subclass); + if (!cppClass) throw Error(`Class ${subclass} not found in class map`); const dartSubclass = this.toDartTypeName(subclass); - lines.push(` case '${subclass}':`); + lines.push(` case '${cppClass.cppType.name}':`); lines.push(` return ${dartSubclass}.fromPointer(${resultVar}.cast());`); } diff --git a/spine-flutter/test/skeleton_drawable_test.dart b/spine-flutter/test/skeleton_drawable_test.dart index 3290bef05..929703c38 100644 --- a/spine-flutter/test/skeleton_drawable_test.dart +++ b/spine-flutter/test/skeleton_drawable_test.dart @@ -91,6 +91,17 @@ void main() async { final boundsInJump = drawable.skeleton.bounds; print(' Bounds during jump: $boundsInJump'); + // Test constraint RTTI + print('\nTesting constraint RTTI:'); + + // IK Constraints + print(' Constraints:'); + for (final constraint in drawable.skeleton.constraints) { + final data = constraint?.data; + print(' Constraint type: ${constraint?.rtti.className}'); + print(' Constraint data type: ${constraint?.data?.rtti.className}'); + } + // Check manager state before cleanup print('\nBefore cleanup:'); AnimationStateEventManager.instance.debugPrint();