import 'package:flutter/services.dart'; import 'package:inject_js/inject_js.dart' as js; import 'package:web_ffi_fork/web_ffi.dart'; import 'package:web_ffi_fork/web_ffi_modules.dart'; import 'spine_flutter_bindings_generated.dart'; Module? _module; class SpineFlutterFFI { final DynamicLibrary dylib; final Allocator allocator; SpineFlutterFFI(this.dylib, this.allocator); } Future initSpineFlutterFFI() async { if (_module == null) { Memory.init(); var v = 0; registerOpaqueType(); registerOpaqueType(); registerOpaqueType(); registerOpaqueType(); registerOpaqueType(); registerOpaqueType(); registerOpaqueType(); registerOpaqueType(); registerOpaqueType(); registerOpaqueType(); registerOpaqueType(); registerOpaqueType(); registerOpaqueType(); registerOpaqueType(); registerOpaqueType(); registerOpaqueType(); registerOpaqueType(); registerOpaqueType(); registerOpaqueType(); registerOpaqueType(); registerOpaqueType(); registerOpaqueType(); registerOpaqueType(); registerOpaqueType(); registerOpaqueType(); registerOpaqueType(); registerOpaqueType(); registerOpaqueType(); registerOpaqueType(); registerOpaqueType(); registerOpaqueType(); registerOpaqueType(); registerOpaqueType(); registerOpaqueType(); registerOpaqueType(); registerOpaqueType(); registerOpaqueType(); registerOpaqueType(); registerOpaqueType(); registerOpaqueType(); registerOpaqueType(); await js.importLibrary('assets/packages/esotericsoftware_spine_flutter/lib/assets/libspine_flutter.js'); Uint8List wasmBinaries = (await rootBundle.load('packages/esotericsoftware_spine_flutter/lib/assets/libspine_flutter.wasm')).buffer.asUint8List(); _module = await EmscriptenModule.compile(wasmBinaries, 'libspine_flutter'); } Module? m = _module; if (m != null) { final dylib = DynamicLibrary.fromModule(m); return SpineFlutterFFI(dylib, dylib.boundMemory); } else { throw Exception("Couldn't load libspine-flutter.js/.wasm"); } }