在 Dart 文档的任何地方,都建议使用js
package 来实现 javascript 互操作性。
但是,我最近发现dart:js
SDK 中存在似乎具有相似(但不相同)接口的包。
这些包之间有什么区别吗?它们的功能是否相同?推荐哪一个?
在 Dart 文档的任何地方,都建议使用js
package 来实现 javascript 互操作性。
但是,我最近发现dart:js
SDK 中存在似乎具有相似(但不相同)接口的包。
这些包之间有什么区别吗?它们的功能是否相同?推荐哪一个?
Js 互操作从package:js开始。它是用window.postMessage构建的。
后来添加了dart:js以提供更好的性能并减小编译后的 js 文件的大小。基本上目标是:
一旦dart:js准备就绪,package:js已经被重写以在封面下使用dart:js 。
package:js提供了一个更简单的 Api,但代价是增加了 js 的大小(因为package:js使用dart:mirrors和noSuchMethod)。
用package: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']);
}
不管怎样,我在 GitHub 上都收到了回复:
该堆栈溢出注释已过时。更喜欢
package:js
- 我们正在努力更新文档以明确推荐。它不再被实现window.postMessage
(那是一个基于 Dartium 的解决方案)——它直接在编译器中处理,应该比dart:js
.
来源:https ://github.com/flutter/flutter/issues/35588#issuecomment-522097151