diff --git a/lib/src/object.dart b/lib/src/object.dart index eb0f79c..9e810f6 100644 --- a/lib/src/object.dart +++ b/lib/src/object.dart @@ -11,6 +11,8 @@ part of '../flutter_qjs.dart'; abstract class JSInvokable extends JSRef { dynamic invoke(List args, [dynamic thisVal]); + dynamic call(List args) => invoke(args); + static dynamic _wrap(dynamic func) { return func is JSInvokable ? func @@ -188,6 +190,9 @@ class _JSFunction extends _JSObject implements JSInvokable, _IsolateEncodable { Map _encode() { return IsolateFunction._new(this)._encode(); } + + @override + call(List args) => invoke(args); } /// Dart function wrapper for isolate diff --git a/lib/src/wrapper.dart b/lib/src/wrapper.dart index cb23d1d..71b03d5 100644 --- a/lib/src/wrapper.dart +++ b/lib/src/wrapper.dart @@ -197,7 +197,8 @@ dynamic _jsToDart(Pointer ctx, Pointer val, }, (e) { JSRef.dupRecursive(e); - if (!completer.isCompleted) completer.completeError(e); + // `throw null` is allowed in js + if (!completer.isCompleted) completer.completeError(e ?? "null"); }, ], jsPromise); jsPromise.free(); @@ -227,13 +228,13 @@ dynamic _jsToDart(Pointer ctx, Pointer val, } final len = plen.value; malloc.free(plen); - final ret = Map(); + final ret = Map(); cache[valptr] = ret; for (var i = 0; i < len; ++i) { final jsAtom = jsPropertyEnumGetAtom(ptab.value, i); final jsAtomValue = jsAtomToValue(ctx, jsAtom); final jsProp = jsGetProperty(ctx, val, jsAtom); - ret[_jsToDart(ctx, jsAtomValue, cache: cache)] = + ret[_jsToDart(ctx, jsAtomValue, cache: cache).toString()] = _jsToDart(ctx, jsProp, cache: cache); jsFreeValue(ctx, jsAtomValue); jsFreeValue(ctx, jsProp);