From 67dd0dff9ba6fab396b1c285563b7cccfa4f500c Mon Sep 17 00:00:00 2001 From: wgh19 Date: Sat, 20 Apr 2024 17:56:36 +0800 Subject: [PATCH] add call method to JSInvokable; Convert js object to dart Map --- lib/src/object.dart | 5 +++++ lib/src/wrapper.dart | 7 ++++--- 2 files changed, 9 insertions(+), 3 deletions(-) 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);