Dynamically convert a Dart 2 Map to a Javascript object
I was able to solve this problem by writing this function that converts a Map to js object.
import 'package:js/js_util.dart' as js;Object mapToJSObj(Map<dynamic,dynamic> a){ var object = js.newObject(); a.forEach((k, v) { var key = k; var value = v; js.setProperty(object, key, value); }); return object;}
A slightly modified version of the accepted answer, which also handles nested Maps. And I also added a solution for convering the other way: from a Javascript object to a Dart Map.
import 'package:js/js.dart';import 'package:js/js_util.dart';Object mapToJsObject(Map map){ var object = newObject(); map.forEach((k, v) { if (v is Map) { setProperty(object, k, mapToJsObject(v)); } else { setProperty(object, k, v); } }); return object;}Map jsObjectToMap(dynamic jsObject) { Map result = {}; List keys = _objectKeys(jsObject); for (dynamic key in keys) { dynamic value = getProperty(jsObject, key); List nestedKeys = objectKeys(value); if ((nestedKeys ?? []).isNotEmpty) { //nested property result[key] = jsObjectToMap(value); } else { result[key] = value; } } return result;}List<String> objectKeys(dynamic jsObject) { if (jsObject == null || jsObject is String || jsObject is num || jsObject is bool) return null; return _objectKeys(jsObject);}@JS('Object.keys')external List<String> _objectKeys(jsObject);