@JS() library zoom_interpo; import 'package:js/js.dart'; import 'package:js/js_util.dart'; /// A workaround to converting an object from JS to a Dart Map. Map jsToMap(jsObject) { return Map.fromIterable( _getKeysOfObject(jsObject), value: (key) => getProperty(jsObject, key), ); } /// A workaround to converting an object to a Dart. dynamic convertToDart(value) { /// Value types. if (value == null) return null; if (value is bool || value is num || value is DateTime || value is String) { return value; } /// JsArray. if (value is Iterable) return value.map(convertToDart).toList(); return jsToMap(value); } // Both of these interfaces exist to call `Object.keys` from Dart. // // But you don't use them directly. Just see `jsToMap`. @JS('Object.keys') external List<String> _getKeysOfObject(jsObject);