getDevices method

  1. @override
Future<List<UsbDevice>> getDevices()
override

Implementation

@override
Future<List<UsbDevice>> getDevices() async {
  try {
    // Devices the user already permitted (from any page of the same origin)
    // are returned without a chooser. The chooser needs a user gesture in a
    // top-level page, so only fall back to it when nothing is permitted yet
    // (and the chooser is enabled).
    var devices = await _permittedLedgerDevices();

    if (devices.isEmpty && LedgerUsb.webDeviceChooserEnabled) {
      final device = await usb.requestDevice(
        RequestUSBDeviceFilters.dart(
          [RequestUSBDeviceFilter(vendorId: _ledgerVendorId)],
        ),
      );

      if (device == null) {
        return [];
      }

      devices = await _permittedLedgerDevices();
    }

    _foundDevices
      ..clear()
      ..addAll(devices);

    return devices
        .map((e) => UsbDevice(
              manufacturerName: e.manufacturerName,
              deviceId: 0,
              vendorId: e.vendorId,
              productId: e.productId,
              productName: e.productName,
              configurationCount: 0,
              identifier: e.serialNumber,
              deviceName: e.productName,
            ))
        .toList();
  } catch (e) {
    debugPrint('Error in getDevices: $e');
    return [];
  }
}