Files
hash-wallet/lib/buy/payment_method.dart
T
jwinterm 04203654f1 Rename Flutter project + binary: cake_wallet -> hash_wallet
The big one. Touches 760+ files. Locks in the user's decision to break
import-line compatibility with upstream cake-tech/cake_wallet in exchange
for a binary named hash_wallet on every platform.

Changes:
- pubspec_description.yaml: project name cake_wallet -> hash_wallet
- 762 Dart files: every 'package:cake_wallet/...' import rewritten to
  'package:hash_wallet/...' (lib/, cw_*/lib/, tool/, test/, integration_test/)
- linux/CMakeLists.txt: BINARY_NAME cake_wallet -> hash_wallet
- windows/CMakeLists.txt: project + BINARY_NAME (CakeWallet -> HashWallet)
- windows/runner/Runner.rc: company / file / product strings to Hash Wallet
  + Such Software LLC copyright
- macos/Runner.xcodeproj/project_base.pbxproj: cake_wallet_new.app refs
  -> hash_wallet.app (macOS output bundle name)
- com.suchsoftware.HashWallet.yml (Flatpak): all binary path refs
  cake_wallet -> hash_wallet (e.g. /app/hash_wallet/hash_wallet)
- linux/com.suchsoftware.HashWallet.desktop: Exec=hash_wallet
- scripts/android/copy_monero_deps.sh: CW_DIR target path
- configure_hash_wallet.sh: error message typo (old filename)

INTENTIONALLY UNCHANGED:
- cw_* subpackage names (cw_core, cw_bitcoin, cw_wownero, etc.) — they
  remain as the historical 'cake wallet' naming; renaming them would
  cascade through every sub-package's internal structure
- Method channel name 'com.cake_wallet/native_utils' in iOS/macOS/Android
  AppDelegates and MainActivity — it's a string identifier that has to
  match the Dart side exactly. Renaming requires both-sides change; it's
  internal-only and not user-visible.
- ghcr.io/cake-tech/cake_wallet:debian13-... docker image references in
  build scripts — that's Cake Labs' published image we use as the build
  environment, not ours.

User data directory now follows the new binary name:
  ~/.local/share/hash_wallet/  (was ~/.local/share/cake_wallet/)
  ~/.config/hash_wallet/       (was ~/.config/cake_wallet/)
Existing users on the old name will need migration if any exist.
2026-05-16 11:33:25 -04:00

308 lines
8.8 KiB
Dart

import 'package:hash_wallet/core/selectable_option.dart';
enum PaymentType {
all,
bankTransfer,
creditCard,
debitCard,
applePay,
googlePay,
revolutPay,
neteller,
skrill,
sepa,
sepaInstant,
ach,
achInstant,
Khipu,
palomaBanktTansfer,
ovo,
zaloPay,
zaloBankTransfer,
gcash,
imps,
dana,
ideal,
paypal,
sepaOpenBankingPayment,
gbpOpenBankingPayment,
lowCostAch,
mobileWallet,
pixInstantPayment,
yellowCardBankTransfer,
fiatBalance,
bancontact,
pixPay,
unknown,
}
extension PaymentTypeTitle on PaymentType {
String? get title {
switch (this) {
case PaymentType.all:
return 'All Payment Methods';
case PaymentType.bankTransfer:
return 'Bank Transfer';
case PaymentType.creditCard:
return 'Credit Card';
case PaymentType.debitCard:
return 'Debit Card';
case PaymentType.applePay:
return 'Apple Pay';
case PaymentType.googlePay:
return 'Google Pay';
case PaymentType.revolutPay:
return 'Revolut Pay';
case PaymentType.neteller:
return 'Neteller';
case PaymentType.skrill:
return 'Skrill';
case PaymentType.sepa:
return 'SEPA';
case PaymentType.sepaInstant:
return 'SEPA Instant';
case PaymentType.ach:
return 'ACH';
case PaymentType.achInstant:
return 'ACH Instant';
case PaymentType.Khipu:
return 'Khipu';
case PaymentType.palomaBanktTansfer:
return 'Paloma Bank Transfer';
case PaymentType.ovo:
return 'OVO';
case PaymentType.zaloPay:
return 'Zalo Pay';
case PaymentType.zaloBankTransfer:
return 'Zalo Bank Transfer';
case PaymentType.gcash:
return 'GCash';
case PaymentType.imps:
return 'IMPS';
case PaymentType.dana:
return 'DANA';
case PaymentType.ideal:
return 'iDEAL';
case PaymentType.paypal:
return 'PayPal';
case PaymentType.sepaOpenBankingPayment:
return 'SEPA Open Banking Payment';
case PaymentType.gbpOpenBankingPayment:
return 'GBP Open Banking Payment';
case PaymentType.lowCostAch:
return 'Low Cost ACH';
case PaymentType.mobileWallet:
return 'Mobile Wallet';
case PaymentType.pixInstantPayment:
return 'PIX Instant Payment';
case PaymentType.yellowCardBankTransfer:
return 'Yellow Card Bank Transfer';
case PaymentType.fiatBalance:
return 'Fiat Balance';
case PaymentType.bancontact:
return 'Bancontact';
case PaymentType.pixPay:
return 'PIX Pay';
default:
return null;
}
}
String? get lightIconPath {
switch (this) {
case PaymentType.all:
return 'assets/images/usd_round_light.svg';
case PaymentType.creditCard:
case PaymentType.debitCard:
case PaymentType.yellowCardBankTransfer:
return 'assets/images/card.svg';
case PaymentType.bankTransfer:
return 'assets/images/bank_light.svg';
case PaymentType.skrill:
return 'assets/images/skrill.svg';
case PaymentType.applePay:
return 'assets/images/apple_pay_round_light.svg';
case PaymentType.revolutPay:
return 'assets/images/revolut_light.svg';
default:
return null;
}
}
String? get darkIconPath {
switch (this) {
case PaymentType.all:
return 'assets/images/usd_round_dark.svg';
case PaymentType.creditCard:
case PaymentType.debitCard:
case PaymentType.yellowCardBankTransfer:
return 'assets/images/card_dark.svg';
case PaymentType.bankTransfer:
return 'assets/images/bank_dark.svg';
case PaymentType.skrill:
return 'assets/images/skrill.svg';
case PaymentType.applePay:
return 'assets/images/apple_pay_round_dark.svg';
case PaymentType.revolutPay:
return 'assets/images/revolut_dark.svg';
default:
return null;
}
}
String? get description {
switch (this) {
default:
return null;
}
}
}
class PaymentMethod extends SelectableOption {
PaymentMethod({
required this.paymentMethodType,
required this.customTitle,
required this.customIconPath,
this.customDescription,
this.customPaymentMethodType,
}) : super(title: paymentMethodType.title ?? customTitle);
final PaymentType paymentMethodType;
final String customTitle;
final String customIconPath;
final String? customDescription;
final String? customPaymentMethodType;
bool isSelected = false;
@override
String? get description => paymentMethodType.description ?? customDescription;
@override
String get lightIconPath => paymentMethodType.lightIconPath ?? customIconPath;
@override
String get darkIconPath => paymentMethodType.darkIconPath ?? customIconPath;
@override
bool get isOptionSelected => isSelected;
factory PaymentMethod.all() {
return PaymentMethod(
paymentMethodType: PaymentType.all,
customTitle: 'All Payment Methods',
customIconPath: 'assets/images/dollar_coin.svg');
}
factory PaymentMethod.fromOnramperJson(Map<String, dynamic> json) {
final type = PaymentMethod.getPaymentTypeId(json['paymentTypeId'] as String?);
return PaymentMethod(
paymentMethodType: type ?? PaymentType.unknown,
customPaymentMethodType: json['paymentTypeId'] as String?,
customTitle: json['name'] as String? ?? 'Unknown',
customIconPath: json['icon'] as String? ?? 'assets/images/card.png',
customDescription: json['description'] as String?);
}
factory PaymentMethod.fromDFX(String paymentMethod, PaymentType paymentType) {
return PaymentMethod(
paymentMethodType: paymentType,
customTitle: paymentMethod,
customIconPath: 'assets/images/card.png');
}
factory PaymentMethod.fromMoonPayJson(Map<String, dynamic> json, PaymentType paymentType) {
return PaymentMethod(
paymentMethodType: paymentType,
customTitle: json['paymentMethod'] as String,
customIconPath: 'assets/images/card.png');
}
factory PaymentMethod.fromMeldJson(Map<String, dynamic> json) {
final type = PaymentMethod.getPaymentTypeId(json['paymentMethod'] as String?);
final logos = json['logos'] as Map<String, dynamic>;
return PaymentMethod(
paymentMethodType: type ?? PaymentType.unknown,
customTitle: json['name'] as String? ?? 'Unknown',
customIconPath: logos['dark'] as String? ?? 'assets/images/card.png',
customDescription: json['description'] as String?);
}
factory PaymentMethod.fromKryptonimJson(Map<String, dynamic> json) {
final type = PaymentMethod.getPaymentTypeId(json['payment_method'] as String?);
return PaymentMethod(
paymentMethodType: type ?? PaymentType.unknown,
customTitle: json['payment_method'] as String? ?? 'Unknown',
customIconPath: 'assets/images/card.png',
);
}
static PaymentType? getPaymentTypeId(String? type) {
switch (type?.toLowerCase()) {
case 'banktransfer':
case 'bank':
case 'yellow_card_bank_transfer':
return PaymentType.bankTransfer;
case 'creditcard':
case 'card':
case 'credit_debit_card':
return PaymentType.creditCard;
case 'debitcard':
return PaymentType.debitCard;
case 'applepay':
case 'apple_pay':
return PaymentType.applePay;
case 'googlepay':
case 'google_pay':
return PaymentType.googlePay;
case 'revolutpay':
return PaymentType.revolutPay;
case 'neteller':
return PaymentType.neteller;
case 'skrill':
return PaymentType.skrill;
case 'sepabanktransfer':
case 'sepa':
case 'sepa_bank_transfer':
return PaymentType.sepa;
case 'sepainstant':
case 'sepa_instant':
return PaymentType.sepaInstant;
case 'ach':
case 'ach_bank_transfer':
return PaymentType.ach;
case 'iach':
case 'instant_ach':
return PaymentType.achInstant;
case 'khipu':
return PaymentType.Khipu;
case 'palomabanktransfer':
return PaymentType.palomaBanktTansfer;
case 'ovo':
return PaymentType.ovo;
case 'zalopay':
return PaymentType.zaloPay;
case 'zalobanktransfer':
case 'za_bank_transfer':
return PaymentType.zaloBankTransfer;
case 'gcash':
return PaymentType.gcash;
case 'imps':
return PaymentType.imps;
case 'dana':
return PaymentType.dana;
case 'ideal':
return PaymentType.ideal;
case 'paypal':
return PaymentType.paypal;
case 'sepa_open_banking_payment':
return PaymentType.sepaOpenBankingPayment;
case 'bancontact':
return PaymentType.bancontact;
case 'pix':
return PaymentType.pixPay;
default:
return null;
}
}
}