dart - Dart :js and js package? 和有什么区别

标签 dart dart-js-interop

在 Dart 文档中的任何地方都建议使用 js用于 JavaScript 互操作性的包。

然而,我最近发现dart:js SDK 中存在的软件包似乎具有相似(但不相同)的界面。

这些包之间有什么区别吗?它们的功能是否相同?推荐哪一款?

最佳答案

Js 互操作始于 package:js .它是用 window.postMessage 构建的.

以后 dart:js已添加以提供更好的性能并减小编译后的 js 文件的大小。基本上目标是:

  • 删除范围和生命周期手动处理
  • 避免使用 noSuchMethod 以保持尽可能低的编译大小
  • 重命名对象以使 API 更易于理解

  • 一旦 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']);
    }
    

    关于dart - Dart :js and js package? 和有什么区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19451731/

    相关文章:

    multithreading - 如何同时启动多个 Future 以填充单个 FutureBuilder ListView?

    javascript - SolanaWeb 3.js 包 TypeError : s. TransactionInstruction 不是构造函数

    android - Flutter 发布 apk 启动时崩溃

    dart - 为将JavaScript移植到Dart而奋斗

    dart - 从 Dart 访问 TinyMCE 内容

    dart - Dart JS库,如何传递回调函数

    dart - 如何在 Dart 中制作 window.prompt?

    animation - 如何在Flutter中动态缩放小部件(在我的情况下为卡片)?

    dart - Dart 聚合物更新聚合物dom元素

    dart - 如何在 Flutter 中添加文件选择器插件?