fromNativeValue function
Implementation
dynamic fromNativeValue(WebFViewController view, Pointer<NativeValue> nativeValue) {
if (nativeValue == nullptr) return null;
JSValueType type = JSValueType.values[nativeValue.ref.tag];
switch (type) {
case JSValueType.TAG_STRING:
Pointer<NativeString> nativeString = Pointer.fromAddress(nativeValue.ref.u);
String result = nativeStringToString(nativeString);
freeNativeString(nativeString);
return result;
case JSValueType.TAG_INT:
return nativeValue.ref.u;
case JSValueType.TAG_BOOL:
return nativeValue.ref.u == 1;
case JSValueType.TAG_NULL:
return null;
case JSValueType.TAG_FLOAT64:
return uInt64ToDouble(nativeValue.ref.u);
case JSValueType.TAG_POINTER:
JSPointerType pointerType = JSPointerType.values[nativeValue.ref.uint32];
if (pointerType == JSPointerType.NativeBindingObject) {
return view.getBindingObject(Pointer.fromAddress(nativeValue.ref.u));
}
return Pointer.fromAddress(nativeValue.ref.u);
case JSValueType.TAG_LIST:
Pointer<NativeValue> head = Pointer.fromAddress(nativeValue.ref.u).cast<NativeValue>();
List result = List.generate(nativeValue.ref.uint32, (index) {
return fromNativeValue(view, head.elementAt(index));
});
malloc.free(head);
return result;
case JSValueType.TAG_FUNCTION:
case JSValueType.TAG_ASYNC_FUNCTION:
break;
case JSValueType.TAG_JSON:
Pointer<NativeString> nativeString = Pointer.fromAddress(nativeValue.ref.u);
dynamic value = jsonDecode(nativeStringToString(nativeString));
freeNativeString(nativeString);
return value;
case JSValueType.TAG_UINT8_BYTES:
Pointer<Uint8> buffer = Pointer.fromAddress(nativeValue.ref.u);
return buffer.asTypedList(nativeValue.ref.uint32);
}
}