在Dart文档中,建议使用js
包进行javascript互操作。
但是,我最近发现SDK中存在dart:js
包似乎具有相似(但不相同)的界面。
这些套餐之间有什么不同吗?它们具有相同的功能吗推荐哪一个?
答案 0 :(得分:9)
Js interop以package:js开头。它是使用window.postMessage构建的。
后来添加dart:js以提供更好的性能并减少已编译的js文件的大小。基本上目标是:
dart:js 准备就绪后, package:js 已被重写,以便在封面下使用 dart:js 。
包:js 提供了一个更简单的Api,其代价是增加了js的大小(因为包:js 使用 dart:mirrors 和 noSuchMethod )。
使用包完成同样的事情:js 和 dart:js :
import 'package:js/js.dart' as js;
main() {
var pixi = new js.Proxy(js.context.PIXI.Stage, 0xffffff);
var renderer = js.context.PIXI.autoDetectRenderer(400, 400);
document.body.append(renderer.view);
}
import 'dart:js' as js;
main() {
var pixi = new js.JsObject(js.context['PIXI']['Stage'], [0xffffff]);
var renderer = js.context['PIXI'].callMethod('autoDetectRenderer', [400, 400]);
document.body.append(renderer['view']);
}
答案 1 :(得分:1)
无论如何,我在GitHub上都收到了回复:
该堆栈溢出注释已过时。首选
package:js
-我们正在更新文档以明确推荐。它不再通过window.postMessage
实施(这是基于Dartium的解决方案)-它直接在编译器中处理,并且应该比dart:js
更有效率。
来源:https://github.com/flutter/flutter/issues/35588#issuecomment-522097151