@@ -21,27 +21,26 @@ final log = Logger('FlutterNFCKit:WebUSB');
2121const int USB_CLASS_CODE_VENDOR_SPECIFIC = 0xFF ;
2222
2323@JS ('navigator.usb' )
24- class _USB {
25- external static dynamic requestDevice (_USBDeviceRequestOptions options);
26- // ignore: unused_field
27- external static Function ondisconnect;
24+ extension type _USB ._(JSObject _) implements JSObject {
25+ external static JSObject requestDevice (_USBDeviceRequestOptions options);
2826}
2927
3028@JS ()
3129@anonymous
32- class _USBDeviceRequestOptions {
33- external factory _USBDeviceRequestOptions ({List <_USBDeviceFilter > filters});
30+ extension type _USBDeviceRequestOptions ._(JSObject _) implements JSObject {
31+ external factory _USBDeviceRequestOptions (
32+ {JSArray <_USBDeviceFilter > filters});
3433}
3534
3635@JS ()
3736@anonymous
38- class _USBDeviceFilter {
37+ extension type _USBDeviceFilter ._( JSObject _) implements JSObject {
3938 external factory _USBDeviceFilter ({int classCode});
4039}
4140
4241@JS ()
4342@anonymous
44- class _USBControlTransferParameters {
43+ extension type _USBControlTransferParameters ._( JSObject _) implements JSObject {
4544 external factory _USBControlTransferParameters (
4645 {String requestType,
4746 String recipient,
@@ -61,28 +60,22 @@ class WebUSB {
6160 return _device != null && getProperty (_device, 'opened' );
6261 }
6362
64- static void _onDisconnect (event) {
65- _device = null ;
66- log.info ('device is disconnected from WebUSB API' );
67- }
68-
6963 static const USB_PROBE_MAGIC = '_NFC_IM_' ;
7064
7165 /// Try to poll a WebUSB device according to our protocol.
7266 static Future <String > poll (int timeout, bool probeMagic) async {
7367 // request WebUSB device with custom classcode
7468 if (! _deviceAvailable ()) {
75- var devicePromise = _USB .requestDevice (_USBDeviceRequestOptions (filters : [
76- _USBDeviceFilter (classCode: USB_CLASS_CODE_VENDOR_SPECIFIC )
77- ] ));
69+ var devicePromise = _USB .requestDevice (_USBDeviceRequestOptions (
70+ filters : [ _USBDeviceFilter (classCode: USB_CLASS_CODE_VENDOR_SPECIFIC )]
71+ .toJS ));
7872 dynamic device = await promiseToFuture (devicePromise);
7973 try {
8074 await promiseToFuture (callMethod (device, 'open' , List .empty ()))
8175 .then ((_) =>
8276 promiseToFuture (callMethod (device, 'claimInterface' , [1 ])))
8377 .timeout (Duration (milliseconds: timeout));
8478 _device = device;
85- _USB .ondisconnect = allowInterop (_onDisconnect);
8679 log.info ("WebUSB device opened" , _device);
8780 } on TimeoutException catch (_) {
8881 log.severe ("Polling tag timeout" );
0 commit comments