This is (or should be) a full JavaScript interop package using package:js bindings.
The bindings are generated by machine-reading WebIDL files for types and MDN website for documentation.
Take a look at MediaStream file and check out how nice it is with the awesome MDN documentation.
Usage
import 'package:js_bindings/js_bindings.dart'; void main() { var div = document.createElement('div') ..innerHTML = 'Hello world =]'; document.body!.appendChild(div); }
Promise and Future
JS Promises and Dart Futures are not the same thing.
This package addes an easy way to use 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) {}); }
What to import
There is a folder called bindings and there is one dart file for each IDL spec.
For example 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}'); }
For a better JS interop
If you wish for a better JS interop in Dart, please, thumbs up the following issues:
Better JS interop in general
Make awaiting a Promise as easy as a Future
Be able to use rename instance members
Download this package source code on GitHub
https://github.com/jodinathan/js_bindings
Provides the list of the opensource Flutter apps collection with GitHub repository.