Files
Konstantin UllrichandGitHub 47d93bd418 Add support for Ledger Nano Gen 5 (#2609)
* chore: update `ledger_flutter_plus` dependency to new repository URL and commit hash in `pubspec_base.yaml`

* feat: add support for Ledger Nano Gen 5 hardware wallet and include new SVG asset

* chore: update `ledger_flutter_plus` dependency reference and remove redundant method call in `LedgerViewModel`
2025-10-28 20:15:09 +01:00

94 lines
2.5 KiB
Dart

import 'package:bitbox_flutter/usb/bitbox_device.dart' as bitbox;
import 'package:ledger_flutter_plus/ledger_flutter_plus.dart' as ledger;
abstract class HardwareWalletDevice {
String get name;
HardwareWalletDeviceType get type;
HardwareWalletConnectionType get connectionType;
}
class LedgerHardwareWalletDevice extends HardwareWalletDevice {
final ledger.LedgerDevice device;
LedgerHardwareWalletDevice(this.device);
@override
String get name => device.name;
@override
HardwareWalletDeviceType get type => device.deviceInfo.toGeneric();
@override
HardwareWalletConnectionType get connectionType => device.connectionType.toGeneric();
}
class BitboxHardwareWalletDevice extends HardwareWalletDevice {
final bitbox.BitboxDevice device;
BitboxHardwareWalletDevice(this.device);
@override
String get name => device.productName;
@override
HardwareWalletDeviceType get type => name.contains("BitBox02 Nova")
? HardwareWalletDeviceType.BitBox02Nova
: HardwareWalletDeviceType.BitBox02;
@override
HardwareWalletConnectionType get connectionType => HardwareWalletConnectionType.usb;
}
enum HardwareWalletDeviceType {
ledgerBlue,
ledgerNanoS,
ledgerNanoX,
ledgerNanoSPlus,
ledgerNanoGen5,
ledgerStax,
ledgerFlex,
BitBox02,
BitBox02Nova;
}
enum HardwareWalletConnectionType {
usb,
ble,
nfc,
qr;
}
extension ToGenericHardwareWalletDeviceType on ledger.LedgerDeviceType {
HardwareWalletDeviceType toGeneric() {
switch (this) {
case ledger.LedgerDeviceType.blue:
return HardwareWalletDeviceType.ledgerBlue;
case ledger.LedgerDeviceType.nanoS:
return HardwareWalletDeviceType.ledgerNanoS;
case ledger.LedgerDeviceType.nanoSP:
return HardwareWalletDeviceType.ledgerNanoSPlus;
case ledger.LedgerDeviceType.nanoX:
return HardwareWalletDeviceType.ledgerNanoX;
case ledger.LedgerDeviceType.nanoGen5:
return HardwareWalletDeviceType.ledgerNanoGen5;
case ledger.LedgerDeviceType.stax:
return HardwareWalletDeviceType.ledgerStax;
case ledger.LedgerDeviceType.flex:
return HardwareWalletDeviceType.ledgerFlex;
}
}
}
extension ToGenericHardwareWalletConnectionType on ledger.ConnectionType {
HardwareWalletConnectionType toGeneric() {
switch (this) {
case ledger.ConnectionType.usb:
return HardwareWalletConnectionType.usb;
case ledger.ConnectionType.ble:
return HardwareWalletConnectionType.ble;
}
}
}