这是一个(或者应该是)一个完整的JavaScript互操作包,使用了package:js绑定。
绑定是通过机器读取 WebIDL 文件中的类型和 MDN 网站上的文档来生成的。

看看 MediaStream 文件,看看它和优秀的MDN文档结合起来有多棒。

用法

import 'package:js_bindings/js_bindings.dart';

void main() {
  var div = document.createElement('div')
    ..innerHTML = 'Hello world =]';
  
  document.body!.appendChild(div);
}

Promise 和 Future

JS Promise 和 Dart Future 是不同的东西。
这个包提供了一种简单的方式来使用 promises

import 'package:js_bindings/js_bindings.dart';

Future<void> main() async {
  await window.navigator.mediaDevices.getUserMedia().future;
  // or
  window.navigator.mediaDevices.getUserMedia().then((event) {});
}

需要导入什么

有一个名为 bindings 的文件夹,每个IDL规范都有一个dart文件。
例如 orientation_event

import 'package:js_bindings/bindings/orientation_event.dart';

Future<void> main() async {
  final permission = await DeviceOrientationEvent.requestPermission().future;

  print('Granted? ${permission == PermissionState.granted}');
}

为了更好的JS互操作

如果您希望Dart有更好的JS互操作,请点赞以下问题

总的来说,更好的JS互操作
让等待Promise像等待Future一样简单
能够使用重命名的实例成员

GitHub

https://github.com/jodinathan/js_bindings