Skip to content

Commit adcf850

Browse files
committed
fix webusb interop by dropping ondisconnect
1 parent 601f303 commit adcf850

File tree

2 files changed

+11
-18
lines changed

2 files changed

+11
-18
lines changed

lib/flutter_nfc_kit_web.dart

+1-1
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ import 'package:flutter_nfc_kit/webusb_interop.dart';
2020
class FlutterNfcKitWeb {
2121
static void registerWith(Registrar registrar) {
2222
final MethodChannel channel = MethodChannel(
23-
'flutter_nfc_kit',
23+
'flutter_nfc_kit/method',
2424
const StandardMethodCodec(),
2525
registrar,
2626
);

lib/webusb_interop.dart

+10-17
Original file line numberDiff line numberDiff line change
@@ -21,27 +21,26 @@ final log = Logger('FlutterNFCKit:WebUSB');
2121
const 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

Comments
 (0)