From 311fff2c446416ecc5c17e6a994e5c9aa7b2ecde Mon Sep 17 00:00:00 2001 From: Omar Hatem Date: Sun, 21 Jul 2024 03:46:43 +0300 Subject: [PATCH] Generic fixes (#1528) * update target sdk for android * make welcome page scrollable fix moonpay url params * fix null exception when restoring from backup * fix ui issues * hopefully fix the timeout exception error report [skip ci] * validate electrum addresses * disable silent payments for hardware wallets * fixes and enhancements --- android/app/build.gradle | 2 +- cw_bitcoin/lib/electrum_wallet_addresses.dart | 17 +- cw_core/lib/crypto_currency.dart | 2 +- cw_core/lib/transaction_info.dart | 2 +- cw_monero/lib/monero_subaddress_list.dart | 3 +- cw_monero/lib/monero_transaction_info.dart | 10 +- cw_wownero/lib/wownero_transaction_info.dart | 10 +- lib/bitcoin/cw_bitcoin.dart | 2 +- lib/buy/moonpay/moonpay_provider.dart | 5 +- lib/entities/provider_types.dart | 3 +- .../screens/dashboard/pages/balance_page.dart | 2 +- lib/src/screens/rescan/rescan_page.dart | 66 ++++--- lib/src/screens/welcome/welcome_page.dart | 187 +++++++++--------- lib/src/widgets/blockchain_height_widget.dart | 148 +++++++------- lib/store/settings_store.dart | 8 +- .../dashboard/balance_view_model.dart | 2 +- .../dashboard/dashboard_view_model.dart | 2 +- .../transaction_details_view_model.dart | 26 +-- res/values/strings_ar.arb | 2 +- res/values/strings_bg.arb | 2 +- res/values/strings_cs.arb | 2 +- res/values/strings_de.arb | 2 +- res/values/strings_en.arb | 2 +- res/values/strings_es.arb | 2 +- res/values/strings_fr.arb | 2 +- res/values/strings_ha.arb | 2 +- res/values/strings_hi.arb | 2 +- res/values/strings_hr.arb | 2 +- res/values/strings_id.arb | 2 +- res/values/strings_it.arb | 2 +- res/values/strings_ja.arb | 2 +- res/values/strings_ko.arb | 2 +- res/values/strings_my.arb | 2 +- res/values/strings_nl.arb | 2 +- res/values/strings_pl.arb | 2 +- res/values/strings_pt.arb | 2 +- res/values/strings_ru.arb | 2 +- res/values/strings_th.arb | 2 +- res/values/strings_tl.arb | 2 +- res/values/strings_tr.arb | 2 +- res/values/strings_uk.arb | 2 +- res/values/strings_ur.arb | 2 +- res/values/strings_yo.arb | 2 +- res/values/strings_zh.arb | 2 +- tool/append_translation.dart | 2 + 45 files changed, 280 insertions(+), 271 deletions(-) diff --git a/android/app/build.gradle b/android/app/build.gradle index 5e27aeb9e..60defb1fd 100644 --- a/android/app/build.gradle +++ b/android/app/build.gradle @@ -46,7 +46,7 @@ android { defaultConfig { applicationId appProperties['id'] minSdkVersion 24 - targetSdkVersion 33 + targetSdkVersion 34 versionCode flutterVersionCode.toInteger() versionName flutterVersionName testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" diff --git a/cw_bitcoin/lib/electrum_wallet_addresses.dart b/cw_bitcoin/lib/electrum_wallet_addresses.dart index e0857a6d0..9499a6db7 100644 --- a/cw_bitcoin/lib/electrum_wallet_addresses.dart +++ b/cw_bitcoin/lib/electrum_wallet_addresses.dart @@ -224,6 +224,7 @@ abstract class ElectrumWalletAddressesBase extends WalletAddresses with Store { updateAddressesByMatch(); updateReceiveAddresses(); updateChangeAddresses(); + _validateAddresses(); await updateAddressesInBox(); if (currentReceiveAddressIndex >= receiveAddresses.length) { @@ -458,10 +459,6 @@ abstract class ElectrumWalletAddressesBase extends WalletAddresses with Store { Future discoverAddresses(List addressList, bool isHidden, Future Function(BitcoinAddressRecord) getAddressHistory, {BitcoinAddressType type = SegwitAddresType.p2wpkh}) async { - if (!isHidden) { - _validateSideHdAddresses(addressList.toList()); - } - final newAddresses = await _createNewAddresses(gap, startIndex: addressList.length, isHidden: isHidden, type: type); addAddresses(newAddresses); @@ -541,11 +538,15 @@ abstract class ElectrumWalletAddressesBase extends WalletAddresses with Store { updateAddressesByMatch(); } - void _validateSideHdAddresses(List addrWithTransactions) { - addrWithTransactions.forEach((element) { - if (element.address != - getAddress(index: element.index, hd: mainHd, addressType: element.type)) + void _validateAddresses() { + allAddresses.forEach((element) { + if (!element.isHidden && element.address != + getAddress(index: element.index, hd: mainHd, addressType: element.type)) { element.isHidden = true; + } else if (element.isHidden && element.address != + getAddress(index: element.index, hd: sideHd, addressType: element.type)) { + element.isHidden = false; + } }); } diff --git a/cw_core/lib/crypto_currency.dart b/cw_core/lib/crypto_currency.dart index 6881393ed..cf7a73b3c 100644 --- a/cw_core/lib/crypto_currency.dart +++ b/cw_core/lib/crypto_currency.dart @@ -281,7 +281,7 @@ class CryptoCurrency extends EnumerableItem with Serializable implemen final s = 'Unexpected token: $name for CryptoCurrency fromFullName'; throw ArgumentError.value(name, 'Fullname', s); } - return CryptoCurrency._fullNameCurrencyMap[name.toLowerCase()]!; + return CryptoCurrency._fullNameCurrencyMap[name.split("(").first.trim().toLowerCase()]!; } @override diff --git a/cw_core/lib/transaction_info.dart b/cw_core/lib/transaction_info.dart index a270c0479..e363d88db 100644 --- a/cw_core/lib/transaction_info.dart +++ b/cw_core/lib/transaction_info.dart @@ -3,7 +3,7 @@ import 'package:cw_core/keyable.dart'; abstract class TransactionInfo extends Object with Keyable { late String id; - late String txhash = id; + late String txHash = id; late int amount; int? fee; late TransactionDirection direction; diff --git a/cw_monero/lib/monero_subaddress_list.dart b/cw_monero/lib/monero_subaddress_list.dart index 623d744fd..c35afb282 100644 --- a/cw_monero/lib/monero_subaddress_list.dart +++ b/cw_monero/lib/monero_subaddress_list.dart @@ -124,8 +124,7 @@ abstract class MoneroSubaddressListBase with Store { Future> _getAllUnusedAddresses( {required int accountIndex, required String label}) async { final allAddresses = subaddress_list.getAllSubaddresses(); - final lastAddress = allAddresses.length == 0 ? allAddresses.last.address : Subaddress(id: -1, address: "", label: ""); - if (allAddresses.isEmpty || _usedAddresses.contains(lastAddress)) { + if (allAddresses.isEmpty || _usedAddresses.contains(allAddresses.last)) { final isAddressUnused = await _newSubaddress(accountIndex: accountIndex, label: label); if (!isAddressUnused) { return await _getAllUnusedAddresses(accountIndex: accountIndex, label: label); diff --git a/cw_monero/lib/monero_transaction_info.dart b/cw_monero/lib/monero_transaction_info.dart index b1a4e4229..596b26812 100644 --- a/cw_monero/lib/monero_transaction_info.dart +++ b/cw_monero/lib/monero_transaction_info.dart @@ -9,14 +9,14 @@ import 'package:cw_core/format_amount.dart'; import 'package:cw_monero/api/transaction_history.dart'; class MoneroTransactionInfo extends TransactionInfo { - MoneroTransactionInfo(this.txhash, this.height, this.direction, this.date, + MoneroTransactionInfo(this.txHash, this.height, this.direction, this.date, this.isPending, this.amount, this.accountIndex, this.addressIndex, this.fee, this.confirmations) : - id = "${txhash}_${amount}_${accountIndex}_${addressIndex}"; + id = "${txHash}_${amount}_${accountIndex}_${addressIndex}"; MoneroTransactionInfo.fromMap(Map map) : id = "${map['hash']}_${map['amount']}_${map['accountIndex']}_${map['addressIndex']}", - txhash = map['hash'] as String, + txHash = map['hash'] as String, height = (map['height'] ?? 0) as int, direction = map['direction'] != null ? parseTransactionDirectionFromNumber(map['direction'] as String) @@ -39,7 +39,7 @@ class MoneroTransactionInfo extends TransactionInfo { MoneroTransactionInfo.fromRow(TransactionInfoRow row) : id = "${row.getHash()}_${row.getAmount()}_${row.subaddrAccount}_${row.subaddrIndex}", - txhash = row.getHash(), + txHash = row.getHash(), height = row.blockHeight, direction = parseTransactionDirectionFromInt(row.direction), date = DateTime.fromMillisecondsSinceEpoch(row.getDatetime() * 1000), @@ -58,7 +58,7 @@ class MoneroTransactionInfo extends TransactionInfo { } final String id; - final String txhash; + final String txHash; final int height; final TransactionDirection direction; final DateTime date; diff --git a/cw_wownero/lib/wownero_transaction_info.dart b/cw_wownero/lib/wownero_transaction_info.dart index 6016e2e59..7b0073452 100644 --- a/cw_wownero/lib/wownero_transaction_info.dart +++ b/cw_wownero/lib/wownero_transaction_info.dart @@ -7,14 +7,14 @@ import 'package:cw_core/format_amount.dart'; import 'package:cw_wownero/api/transaction_history.dart'; class WowneroTransactionInfo extends TransactionInfo { - WowneroTransactionInfo(this.txhash, this.height, this.direction, this.date, + WowneroTransactionInfo(this.txHash, this.height, this.direction, this.date, this.isPending, this.amount, this.accountIndex, this.addressIndex, this.fee, this.confirmations) : - id = "${txhash}_${amount}_${accountIndex}_${addressIndex}"; + id = "${txHash}_${amount}_${accountIndex}_${addressIndex}"; WowneroTransactionInfo.fromMap(Map map) : id = "${map['hash']}_${map['amount']}_${map['accountIndex']}_${map['addressIndex']}", - txhash = map['hash'] as String, + txHash = map['hash'] as String, height = (map['height'] ?? 0) as int, direction = map['direction'] != null ? parseTransactionDirectionFromNumber(map['direction'] as String) @@ -37,7 +37,7 @@ class WowneroTransactionInfo extends TransactionInfo { WowneroTransactionInfo.fromRow(TransactionInfoRow row) : id = "${row.getHash()}_${row.getAmount()}_${row.subaddrAccount}_${row.subaddrIndex}", - txhash = row.getHash(), + txHash = row.getHash(), height = row.blockHeight, direction = parseTransactionDirectionFromInt(row.direction), date = DateTime.fromMillisecondsSinceEpoch(row.getDatetime() * 1000), @@ -56,7 +56,7 @@ class WowneroTransactionInfo extends TransactionInfo { } final String id; - final String txhash; + final String txHash; final int height; final TransactionDirection direction; final DateTime date; diff --git a/lib/bitcoin/cw_bitcoin.dart b/lib/bitcoin/cw_bitcoin.dart index 86d9c4985..efb1211bc 100644 --- a/lib/bitcoin/cw_bitcoin.dart +++ b/lib/bitcoin/cw_bitcoin.dart @@ -560,7 +560,7 @@ class CWBitcoin extends Bitcoin { if (tweaksResponse != null) { return true; } - } on RequestFailedTimeoutException { + } on RequestFailedTimeoutException catch (_) { return false; } catch (_) { rethrow; diff --git a/lib/buy/moonpay/moonpay_provider.dart b/lib/buy/moonpay/moonpay_provider.dart index 59251e064..c89fb222f 100644 --- a/lib/buy/moonpay/moonpay_provider.dart +++ b/lib/buy/moonpay/moonpay_provider.dart @@ -149,10 +149,9 @@ class MoonPayProvider extends BuyProvider { 'colorCode': settingsStore.currentTheme.type == ThemeType.dark ? '#${Palette.blueCraiola.value.toRadixString(16).substring(2, 8)}' : '#${Palette.moderateSlateBlue.value.toRadixString(16).substring(2, 8)}', - 'defaultCurrencyCode': _normalizeCurrency(currency), - 'baseCurrencyCode': _normalizeCurrency(currency), + 'baseCurrencyCode': settingsStore.fiatCurrency.title, 'baseCurrencyAmount': amount ?? '0', - 'currencyCode': currencyCode, + 'currencyCode': _normalizeCurrency(currency), 'walletAddress': walletAddress, 'lockAmount': 'false', 'showAllCurrencies': 'false', diff --git a/lib/entities/provider_types.dart b/lib/entities/provider_types.dart index da7bae4c1..b9dd4ef2a 100644 --- a/lib/entities/provider_types.dart +++ b/lib/entities/provider_types.dart @@ -67,9 +67,8 @@ class ProvidersHelper { ]; case WalletType.litecoin: case WalletType.bitcoinCash: - return [ProviderType.askEachTime, ProviderType.onramper, ProviderType.robinhood, ProviderType.moonpay]; case WalletType.solana: - return [ProviderType.askEachTime, ProviderType.onramper, ProviderType.robinhood]; + return [ProviderType.askEachTime, ProviderType.onramper, ProviderType.robinhood, ProviderType.moonpay]; case WalletType.tron: return [ ProviderType.askEachTime, diff --git a/lib/src/screens/dashboard/pages/balance_page.dart b/lib/src/screens/dashboard/pages/balance_page.dart index 7ffcf918d..d95c19dad 100644 --- a/lib/src/screens/dashboard/pages/balance_page.dart +++ b/lib/src/screens/dashboard/pages/balance_page.dart @@ -340,7 +340,7 @@ class CryptoBalanceWidget extends StatelessWidget { builder: (BuildContext context) => AlertWithTwoActions( alertTitle: S.of(context).change_current_node_title, alertContent: S.of(context).confirm_silent_payments_switch_node, - rightButtonText: S.of(context).ok, + rightButtonText: S.of(context).confirm, leftButtonText: S.of(context).cancel, actionRightButton: () { dashboardViewModel.setSilentPaymentsScanning(newValue); diff --git a/lib/src/screens/rescan/rescan_page.dart b/lib/src/screens/rescan/rescan_page.dart index 4b2327c43..b66c94878 100644 --- a/lib/src/screens/rescan/rescan_page.dart +++ b/lib/src/screens/rescan/rescan_page.dart @@ -22,38 +22,42 @@ class RescanPage extends BasePage { @override Widget body(BuildContext context) { - return Padding( - padding: EdgeInsets.only(left: 24, right: 24, bottom: 24), - child: Column(mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ - Observer( - builder: (_) => BlockchainHeightWidget( - key: _blockchainHeightWidgetKey, - onHeightOrDateEntered: (value) => _rescanViewModel.isButtonEnabled = value, - isSilentPaymentsScan: _rescanViewModel.isSilentPaymentsScan, - doSingleScan: _rescanViewModel.doSingleScan, - toggleSingleScan: () => - _rescanViewModel.doSingleScan = !_rescanViewModel.doSingleScan, - walletType: _rescanViewModel.wallet.type, - )), - Observer( - builder: (_) => LoadingPrimaryButton( - isLoading: _rescanViewModel.state == RescanWalletState.rescaning, - text: S.of(context).rescan, - onPressed: () async { - if (_rescanViewModel.isSilentPaymentsScan) { - return _toggleSilentPaymentsScanning(context); - } + return GestureDetector( + behavior: HitTestBehavior.opaque, + onTap: () => FocusScope.of(context).unfocus(), + child: Padding( + padding: EdgeInsets.only(left: 24, right: 24, bottom: 24), + child: Column(mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ + Observer( + builder: (_) => BlockchainHeightWidget( + key: _blockchainHeightWidgetKey, + onHeightOrDateEntered: (value) => _rescanViewModel.isButtonEnabled = value, + isSilentPaymentsScan: _rescanViewModel.isSilentPaymentsScan, + doSingleScan: _rescanViewModel.doSingleScan, + toggleSingleScan: () => + _rescanViewModel.doSingleScan = !_rescanViewModel.doSingleScan, + walletType: _rescanViewModel.wallet.type, + )), + Observer( + builder: (_) => LoadingPrimaryButton( + isLoading: _rescanViewModel.state == RescanWalletState.rescaning, + text: S.of(context).rescan, + onPressed: () async { + if (_rescanViewModel.isSilentPaymentsScan) { + return _toggleSilentPaymentsScanning(context); + } - _rescanViewModel.rescanCurrentWallet( - restoreHeight: _blockchainHeightWidgetKey.currentState!.height); + _rescanViewModel.rescanCurrentWallet( + restoreHeight: _blockchainHeightWidgetKey.currentState!.height); - Navigator.of(context).pop(); - }, - color: Theme.of(context).primaryColor, - textColor: Colors.white, - isDisabled: !_rescanViewModel.isButtonEnabled, - )) - ]), + Navigator.of(context).pop(); + }, + color: Theme.of(context).primaryColor, + textColor: Colors.white, + isDisabled: !_rescanViewModel.isButtonEnabled, + )) + ]), + ), ); } @@ -71,7 +75,7 @@ class RescanPage extends BasePage { builder: (BuildContext _dialogContext) => AlertWithTwoActions( alertTitle: S.of(_dialogContext).change_current_node_title, alertContent: S.of(_dialogContext).confirm_silent_payments_switch_node, - rightButtonText: S.of(_dialogContext).ok, + rightButtonText: S.of(_dialogContext).confirm, leftButtonText: S.of(_dialogContext).cancel, actionRightButton: () async { Navigator.of(_dialogContext).pop(); diff --git a/lib/src/screens/welcome/welcome_page.dart b/lib/src/screens/welcome/welcome_page.dart index 2142fdf9b..defc8e2c8 100644 --- a/lib/src/screens/welcome/welcome_page.dart +++ b/lib/src/screens/welcome/welcome_page.dart @@ -1,3 +1,4 @@ +import 'package:cake_wallet/src/widgets/scollable_with_bottom_section.dart'; import 'package:cake_wallet/themes/extensions/cake_text_theme.dart'; import 'package:cake_wallet/themes/theme_base.dart'; import 'package:cake_wallet/utils/responsive_layout_util.dart'; @@ -49,115 +50,113 @@ class WelcomePage extends BasePage { @override Widget body(BuildContext context) { - final welcomeImage = currentTheme.type == ThemeType.dark - ? welcomeImageDark - : welcomeImageLight; + final welcomeImage = currentTheme.type == ThemeType.dark ? welcomeImageDark : welcomeImageLight; final newWalletImage = Image.asset('assets/images/new_wallet.png', height: 12, width: 12, color: Theme.of(context).extension()!.restoreWalletButtonTextColor); final restoreWalletImage = Image.asset('assets/images/restore_wallet.png', - height: 12, - - width: 12, - color: Theme.of(context).extension()!.titleColor); + height: 12, width: 12, color: Theme.of(context).extension()!.titleColor); return WillPopScope( - onWillPop: () async => false, - child: Container( - alignment: Alignment.center, - padding: EdgeInsets.only(top: 64, bottom: 24, left: 24, right: 24), - child: ConstrainedBox( - constraints: BoxConstraints( - maxWidth: ResponsiveLayoutUtilBase.kDesktopMaxWidthConstraint), - child: Column( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - children: [ - Column( - children: [ - AspectRatio( - aspectRatio: aspectRatioImage, - child: FittedBox( - child: welcomeImage, fit: BoxFit.contain), - ), - Padding( - padding: EdgeInsets.only(top: 24), - child: Text( - S.of(context).welcome, - style: TextStyle( - fontSize: 18, - fontWeight: FontWeight.w500, - color: Theme.of(context).extension()!.hintTextColor, - ), - textAlign: TextAlign.center, - ), - ), - Padding( - padding: EdgeInsets.only(top: 5), - child: Text( - appTitle(context), - style: TextStyle( - fontSize: 36, - fontWeight: FontWeight.bold, - color: Theme.of(context).extension()!.titleColor, - ), - textAlign: TextAlign.center, - ), - ), - Padding( - padding: EdgeInsets.only(top: 5), - child: Text( - appDescription(context), - style: TextStyle( - fontSize: 16, - fontWeight: FontWeight.w500, - color: Theme.of(context).extension()!.hintTextColor, - ), - textAlign: TextAlign.center, - ), - ), - ], - ), - Column( - children: [ - Text( - S.of(context).please_make_selection, + onWillPop: () async => false, + child: ScrollableWithBottomSection( + content: Container( + alignment: Alignment.center, + padding: EdgeInsets.only(top: 64, bottom: 24, left: 24, right: 24), + child: ConstrainedBox( + constraints: + BoxConstraints(maxWidth: ResponsiveLayoutUtilBase.kDesktopMaxWidthConstraint), + child: Column( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + Column( + children: [ + AspectRatio( + aspectRatio: aspectRatioImage, + child: FittedBox(child: welcomeImage, fit: BoxFit.contain), + ), + Padding( + padding: EdgeInsets.only(top: 24), + child: Text( + S.of(context).welcome, style: TextStyle( - fontSize: 12, - fontWeight: FontWeight.normal, + fontSize: 18, + fontWeight: FontWeight.w500, color: Theme.of(context).extension()!.hintTextColor, ), textAlign: TextAlign.center, ), - Padding( - padding: EdgeInsets.only(top: 24), - child: PrimaryImageButton( - onPressed: () => Navigator.pushNamed( - context, Routes.newWalletFromWelcome), - image: newWalletImage, - text: S.of(context).create_new, - color: Theme.of(context).extension()!.createNewWalletButtonBackgroundColor, - textColor: Theme.of(context).extension()!.restoreWalletButtonTextColor, + ), + Padding( + padding: EdgeInsets.only(top: 5), + child: Text( + appTitle(context), + style: TextStyle( + fontSize: 36, + fontWeight: FontWeight.bold, + color: Theme.of(context).extension()!.titleColor, ), + textAlign: TextAlign.center, ), - Padding( - padding: EdgeInsets.only(top: 10), - child: PrimaryImageButton( - onPressed: () { - Navigator.pushNamed( - context, Routes.restoreOptions, - arguments: true); - }, - image: restoreWalletImage, - text: S.of(context).restore_wallet, - color: Theme.of(context).cardColor, - textColor: Theme.of(context).extension()!.titleColor), - ) - ], - ) - ], + ), + Padding( + padding: EdgeInsets.only(top: 5), + child: Text( + appDescription(context), + style: TextStyle( + fontSize: 16, + fontWeight: FontWeight.w500, + color: Theme.of(context).extension()!.hintTextColor, + ), + textAlign: TextAlign.center, + ), + ), + ], + ), + ], + ), + ), + ), + bottomSection: Column( + children: [ + Text( + S.of(context).please_make_selection, + style: TextStyle( + fontSize: 12, + fontWeight: FontWeight.normal, + color: Theme.of(context).extension()!.hintTextColor, ), - ))); + textAlign: TextAlign.center, + ), + Padding( + padding: EdgeInsets.only(top: 24), + child: PrimaryImageButton( + onPressed: () => Navigator.pushNamed(context, Routes.newWalletFromWelcome), + image: newWalletImage, + text: S.of(context).create_new, + color: Theme.of(context) + .extension()! + .createNewWalletButtonBackgroundColor, + textColor: + Theme.of(context).extension()!.restoreWalletButtonTextColor, + ), + ), + Padding( + padding: EdgeInsets.only(top: 10), + child: PrimaryImageButton( + onPressed: () { + Navigator.pushNamed(context, Routes.restoreOptions, arguments: true); + }, + image: restoreWalletImage, + text: S.of(context).restore_wallet, + color: Theme.of(context).cardColor, + textColor: Theme.of(context).extension()!.titleColor), + ) + ], + ), + ), + ); } } diff --git a/lib/src/widgets/blockchain_height_widget.dart b/lib/src/widgets/blockchain_height_widget.dart index 4023e66ad..e0f83a4f4 100644 --- a/lib/src/widgets/blockchain_height_widget.dart +++ b/lib/src/widgets/blockchain_height_widget.dart @@ -65,89 +65,93 @@ class BlockchainHeightState extends State { @override Widget build(BuildContext context) { - return Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - Row( - children: [ - Flexible( - child: Container( - padding: EdgeInsets.only(top: 20.0, bottom: 10.0), - child: BaseTextFormField( - focusNode: widget.focusNode, - controller: restoreHeightController, - keyboardType: TextInputType.numberWithOptions(signed: false, decimal: false), - hintText: widget.isSilentPaymentsScan - ? S.of(context).silent_payments_scan_from_height - : S.of(context).widgets_restore_from_blockheight, - ))) - ], - ), - if (widget.hasDatePicker) ...[ - Padding( - padding: EdgeInsets.only(top: 15, bottom: 15), - child: Text( - S.of(context).widgets_or, - style: TextStyle( - fontSize: 16.0, - fontWeight: FontWeight.w500, - color: Theme.of(context).extension()!.titleColor), - ), - ), + return GestureDetector( + behavior: HitTestBehavior.opaque, + onTap: () => FocusScope.of(context).unfocus(), + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ Row( children: [ Flexible( child: Container( - child: InkWell( - onTap: () => _selectDate(context), - child: IgnorePointer( + padding: EdgeInsets.only(top: 20.0, bottom: 10.0), child: BaseTextFormField( - controller: dateController, - hintText: widget.isSilentPaymentsScan - ? S.of(context).silent_payments_scan_from_date - : S.of(context).widgets_restore_from_date, - )), - ), - )) + focusNode: widget.focusNode, + controller: restoreHeightController, + keyboardType: TextInputType.numberWithOptions(signed: false, decimal: false), + hintText: widget.isSilentPaymentsScan + ? S.of(context).silent_payments_scan_from_height + : S.of(context).widgets_restore_from_blockheight, + ))) ], ), - if (widget.isSilentPaymentsScan) + if (widget.hasDatePicker) ...[ Padding( - padding: EdgeInsets.only(top: 24), - child: Row( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - children: [ - Text( - S.of(context).scan_one_block, - style: TextStyle( - fontSize: 14, - fontWeight: FontWeight.normal, - color: Theme.of(context).extension()!.titleColor, - ), - ), - Padding( - padding: const EdgeInsets.only(right: 8), - child: StandardSwitch( - value: widget.doSingleScan, - onTaped: () => widget.toggleSingleScan?.call(), - ), - ) - ], + padding: EdgeInsets.only(top: 15, bottom: 15), + child: Text( + S.of(context).widgets_or, + style: TextStyle( + fontSize: 16.0, + fontWeight: FontWeight.w500, + color: Theme.of(context).extension()!.titleColor), ), ), - Padding( - padding: EdgeInsets.only(left: 40, right: 40, top: 24), - child: Text( - widget.isSilentPaymentsScan - ? S.of(context).silent_payments_scan_from_date_or_blockheight - : S.of(context).restore_from_date_or_blockheight, - textAlign: TextAlign.center, - style: TextStyle( - fontSize: 12, fontWeight: FontWeight.normal, color: Theme.of(context).hintColor), + Row( + children: [ + Flexible( + child: Container( + child: InkWell( + onTap: () => _selectDate(context), + child: IgnorePointer( + child: BaseTextFormField( + controller: dateController, + hintText: widget.isSilentPaymentsScan + ? S.of(context).silent_payments_scan_from_date + : S.of(context).widgets_restore_from_date, + )), + ), + )) + ], ), - ) - ] - ], + if (widget.isSilentPaymentsScan) + Padding( + padding: EdgeInsets.only(top: 24), + child: Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + Text( + S.of(context).scan_one_block, + style: TextStyle( + fontSize: 14, + fontWeight: FontWeight.normal, + color: Theme.of(context).extension()!.titleColor, + ), + ), + Padding( + padding: const EdgeInsets.only(right: 8), + child: StandardSwitch( + value: widget.doSingleScan, + onTaped: () => widget.toggleSingleScan?.call(), + ), + ) + ], + ), + ), + Padding( + padding: EdgeInsets.only(left: 40, right: 40, top: 24), + child: Text( + widget.isSilentPaymentsScan + ? S.of(context).silent_payments_scan_from_date_or_blockheight + : S.of(context).restore_from_date_or_blockheight, + textAlign: TextAlign.center, + style: TextStyle( + fontSize: 12, fontWeight: FontWeight.normal, color: Theme.of(context).hintColor), + ), + ) + ] + ], + ), ); } diff --git a/lib/store/settings_store.dart b/lib/store/settings_store.dart index 8e16adbff..8fb26df53 100644 --- a/lib/store/settings_store.dart +++ b/lib/store/settings_store.dart @@ -1184,9 +1184,11 @@ abstract class SettingsStoreBase with Store { raw: sharedPreferences.getInt(PreferencesKey.moneroTransactionPriority)!) ?? priority[WalletType.monero]!; - priority[WalletType.wownero] = wownero?.deserializeWowneroTransactionPriority( - raw: sharedPreferences.getInt(PreferencesKey.wowneroTransactionPriority)!) ?? - priority[WalletType.wownero]!; + if (wownero != null && + sharedPreferences.getInt(PreferencesKey.wowneroTransactionPriority) != null) { + priority[WalletType.wownero] = wownero!.deserializeWowneroTransactionPriority( + raw: sharedPreferences.getInt(PreferencesKey.wowneroTransactionPriority)!); + } if (bitcoin != null && sharedPreferences.getInt(PreferencesKey.bitcoinTransactionPriority) != null) { diff --git a/lib/view_model/dashboard/balance_view_model.dart b/lib/view_model/dashboard/balance_view_model.dart index c8acb9c2c..8deb3b27c 100644 --- a/lib/view_model/dashboard/balance_view_model.dart +++ b/lib/view_model/dashboard/balance_view_model.dart @@ -61,7 +61,7 @@ abstract class BalanceViewModelBase with Store { WalletBase, TransactionInfo> wallet; @computed - bool get hasSilentPayments => wallet.type == WalletType.bitcoin; + bool get hasSilentPayments => wallet.type == WalletType.bitcoin && !wallet.isHardwareWallet; @computed double get price { diff --git a/lib/view_model/dashboard/dashboard_view_model.dart b/lib/view_model/dashboard/dashboard_view_model.dart index b4c5240e1..cc9cf1b7a 100644 --- a/lib/view_model/dashboard/dashboard_view_model.dart +++ b/lib/view_model/dashboard/dashboard_view_model.dart @@ -308,7 +308,7 @@ abstract class DashboardViewModelBase with Store { wallet.type == WalletType.haven; @computed - bool get hasSilentPayments => wallet.type == WalletType.bitcoin; + bool get hasSilentPayments => wallet.type == WalletType.bitcoin && !wallet.isHardwareWallet; @computed bool get showSilentPaymentsCard => hasSilentPayments && settingsStore.silentPaymentsCardDisplay; diff --git a/lib/view_model/transaction_details_view_model.dart b/lib/view_model/transaction_details_view_model.dart index 025ccab9b..9e71837a7 100644 --- a/lib/view_model/transaction_details_view_model.dart +++ b/lib/view_model/transaction_details_view_model.dart @@ -86,7 +86,7 @@ abstract class TransactionDetailsViewModelBase with Store { if (showRecipientAddress && !isRecipientAddressShown) { try { final recipientAddress = transactionDescriptionBox.values - .firstWhere((val) => val.id == transactionInfo.id) + .firstWhere((val) => val.id == transactionInfo.txHash) .recipientAddress; if (recipientAddress?.isNotEmpty ?? false) { @@ -105,14 +105,14 @@ abstract class TransactionDetailsViewModelBase with Store { value: _explorerDescription(type), onTap: () async { try { - final uri = Uri.parse(_explorerUrl(type, tx.id)); + final uri = Uri.parse(_explorerUrl(type, tx.txHash)); if (await canLaunchUrl(uri)) await launchUrl(uri, mode: LaunchMode.externalApplication); } catch (e) {} })); final description = transactionDescriptionBox.values.firstWhere( - (val) => val.id == transactionInfo.id, - orElse: () => TransactionDescription(id: transactionInfo.id)); + (val) => val.id == transactionInfo.txHash, + orElse: () => TransactionDescription(id: transactionInfo.txHash)); items.add(TextFieldListItem( title: S.current.note_tap_to_change, @@ -214,7 +214,7 @@ abstract class TransactionDetailsViewModelBase with Store { final addressIndex = tx.additionalInfo['addressIndex'] as int; final feeFormatted = tx.feeFormatted(); final _items = [ - StandartListItem(title: S.current.transaction_details_transaction_id, value: tx.txhash), + StandartListItem(title: S.current.transaction_details_transaction_id, value: tx.txHash), StandartListItem( title: S.current.transaction_details_date, value: dateFormat.format(tx.date)), StandartListItem(title: S.current.transaction_details_height, value: '${tx.height}'), @@ -250,7 +250,7 @@ abstract class TransactionDetailsViewModelBase with Store { void _addElectrumListItems(TransactionInfo tx, DateFormat dateFormat) { final _items = [ - StandartListItem(title: S.current.transaction_details_transaction_id, value: tx.id), + StandartListItem(title: S.current.transaction_details_transaction_id, value: tx.txHash), StandartListItem( title: S.current.transaction_details_date, value: dateFormat.format(tx.date)), StandartListItem(title: S.current.confirmations, value: tx.confirmations.toString()), @@ -265,7 +265,7 @@ abstract class TransactionDetailsViewModelBase with Store { void _addHavenListItems(TransactionInfo tx, DateFormat dateFormat) { items.addAll([ - StandartListItem(title: S.current.transaction_details_transaction_id, value: tx.id), + StandartListItem(title: S.current.transaction_details_transaction_id, value: tx.txHash), StandartListItem( title: S.current.transaction_details_date, value: dateFormat.format(tx.date)), StandartListItem(title: S.current.transaction_details_height, value: '${tx.height}'), @@ -277,7 +277,7 @@ abstract class TransactionDetailsViewModelBase with Store { void _addEthereumListItems(TransactionInfo tx, DateFormat dateFormat) { final _items = [ - StandartListItem(title: S.current.transaction_details_transaction_id, value: tx.id), + StandartListItem(title: S.current.transaction_details_transaction_id, value: tx.txHash), StandartListItem( title: S.current.transaction_details_date, value: dateFormat.format(tx.date)), StandartListItem(title: S.current.confirmations, value: tx.confirmations.toString()), @@ -296,7 +296,7 @@ abstract class TransactionDetailsViewModelBase with Store { void _addNanoListItems(TransactionInfo tx, DateFormat dateFormat) { final _items = [ - StandartListItem(title: S.current.transaction_details_transaction_id, value: tx.id), + StandartListItem(title: S.current.transaction_details_transaction_id, value: tx.txHash), if (showRecipientAddress && tx.to != null) StandartListItem(title: S.current.transaction_details_recipient_address, value: tx.to!), if (showRecipientAddress && tx.from != null) @@ -313,7 +313,7 @@ abstract class TransactionDetailsViewModelBase with Store { void _addPolygonListItems(TransactionInfo tx, DateFormat dateFormat) { final _items = [ - StandartListItem(title: S.current.transaction_details_transaction_id, value: tx.id), + StandartListItem(title: S.current.transaction_details_transaction_id, value: tx.txHash), StandartListItem( title: S.current.transaction_details_date, value: dateFormat.format(tx.date)), StandartListItem(title: S.current.confirmations, value: tx.confirmations.toString()), @@ -332,7 +332,7 @@ abstract class TransactionDetailsViewModelBase with Store { void _addSolanaListItems(TransactionInfo tx, DateFormat dateFormat) { final _items = [ - StandartListItem(title: S.current.transaction_details_transaction_id, value: tx.id), + StandartListItem(title: S.current.transaction_details_transaction_id, value: tx.txHash), StandartListItem( title: S.current.transaction_details_date, value: dateFormat.format(tx.date)), StandartListItem(title: S.current.transaction_details_amount, value: tx.amountFormatted()), @@ -396,7 +396,7 @@ abstract class TransactionDetailsViewModelBase with Store { void _addTronListItems(TransactionInfo tx, DateFormat dateFormat) { final _items = [ - StandartListItem(title: S.current.transaction_details_transaction_id, value: tx.id), + StandartListItem(title: S.current.transaction_details_transaction_id, value: tx.txHash), StandartListItem( title: S.current.transaction_details_date, value: dateFormat.format(tx.date)), StandartListItem(title: S.current.transaction_details_amount, value: tx.amountFormatted()), @@ -455,7 +455,7 @@ abstract class TransactionDetailsViewModelBase with Store { final addressIndex = tx.additionalInfo['addressIndex'] as int; final feeFormatted = tx.feeFormatted(); final _items = [ - StandartListItem(title: S.current.transaction_details_transaction_id, value: tx.txhash), + StandartListItem(title: S.current.transaction_details_transaction_id, value: tx.txHash), StandartListItem( title: S.current.transaction_details_date, value: dateFormat.format(tx.date)), StandartListItem(title: S.current.transaction_details_height, value: '${tx.height}'), diff --git a/res/values/strings_ar.arb b/res/values/strings_ar.arb index 59fe26ef8..124e85270 100644 --- a/res/values/strings_ar.arb +++ b/res/values/strings_ar.arb @@ -143,7 +143,7 @@ "confirm_fee_deduction": "تأكيد خصم الرسوم", "confirm_fee_deduction_content": "هل توافق على خصم الرسوم من الإخراج؟", "confirm_sending": "تأكيد الإرسال", - "confirm_silent_payments_switch_node": "حاليا مطلوب لتبديل العقد لمسح المدفوعات الصامتة", + "confirm_silent_payments_switch_node": "العقدة الحالية لا تدعم المدفوعات الصامتة \\ ncake wallet سوف تتحول إلى عقدة متوافقة ، فقط للمسح الضوئي", "confirmations": "التأكيدات", "confirmed": "رصيد مؤكد", "confirmed_tx": "مؤكد", diff --git a/res/values/strings_bg.arb b/res/values/strings_bg.arb index 689fc06cf..dee839ea5 100644 --- a/res/values/strings_bg.arb +++ b/res/values/strings_bg.arb @@ -143,7 +143,7 @@ "confirm_fee_deduction": "Потвърдете приспадането на таксите", "confirm_fee_deduction_content": "Съгласни ли сте да приспадате таксата от продукцията?", "confirm_sending": "Потвърждаване на изпращането", - "confirm_silent_payments_switch_node": "Понастоящем се изисква да превключвате възлите за сканиране на мълчаливи плащания", + "confirm_silent_payments_switch_node": "Текущият ви възел не поддържа Silent Payments \\ Ncake Wallet ще премине към съвместим възел, само за сканиране", "confirmations": "потвърждения", "confirmed": "Потвърден баланс", "confirmed_tx": "Потвърдено", diff --git a/res/values/strings_cs.arb b/res/values/strings_cs.arb index 433351a5b..ddc572766 100644 --- a/res/values/strings_cs.arb +++ b/res/values/strings_cs.arb @@ -143,7 +143,7 @@ "confirm_fee_deduction": "Potvrďte odpočet poplatků", "confirm_fee_deduction_content": "Souhlasíte s odečtením poplatku z výstupu?", "confirm_sending": "Potvrdit odeslání", - "confirm_silent_payments_switch_node": "V současné době je nutné přepínat uzly pro skenování tichých plateb", + "confirm_silent_payments_switch_node": "Váš aktuální uzel nepodporuje tiché platby \\ Ncake peněženka se přepne na kompatibilní uzel, pouze pro skenování", "confirmations": "Potvrzení", "confirmed": "Potvrzený zůstatek", "confirmed_tx": "Potvrzeno", diff --git a/res/values/strings_de.arb b/res/values/strings_de.arb index 624147cc2..de21d7e30 100644 --- a/res/values/strings_de.arb +++ b/res/values/strings_de.arb @@ -143,7 +143,7 @@ "confirm_fee_deduction": "Gebührenabzug bestätigen", "confirm_fee_deduction_content": "Stimmen Sie zu, die Gebühr von der Ausgabe abzuziehen?", "confirm_sending": "Senden bestätigen", - "confirm_silent_payments_switch_node": "Derzeit ist es erforderlich, Knoten zu wechseln, um stille Zahlungen zu scannen", + "confirm_silent_payments_switch_node": "Ihr aktueller Knoten unterstützt keine stillen Zahlungen \\ NCAKE Wallet wechselt zu einem kompatiblen Knoten, nur zum Scannen", "confirmations": "Bestätigungen", "confirmed": "Bestätigter Saldo", "confirmed_tx": "Bestätigt", diff --git a/res/values/strings_en.arb b/res/values/strings_en.arb index 4c7dcbebe..48950464d 100644 --- a/res/values/strings_en.arb +++ b/res/values/strings_en.arb @@ -143,7 +143,7 @@ "confirm_fee_deduction": "Confirm Fee Deduction", "confirm_fee_deduction_content": "Do you agree to deduct the fee from the output?", "confirm_sending": "Confirm sending", - "confirm_silent_payments_switch_node": "Currently it is required to switch nodes to scan silent payments", + "confirm_silent_payments_switch_node": "Your current node does not support silent payments\\nCake Wallet will switch to a compatible node, just for scanning", "confirmations": "Confirmations", "confirmed": "Confirmed Balance", "confirmed_tx": "Confirmed", diff --git a/res/values/strings_es.arb b/res/values/strings_es.arb index 5cf99d3c3..4aa0042c0 100644 --- a/res/values/strings_es.arb +++ b/res/values/strings_es.arb @@ -143,7 +143,7 @@ "confirm_fee_deduction": "Confirmar la deducción de la tarifa", "confirm_fee_deduction_content": "¿Acepta deducir la tarifa de la producción?", "confirm_sending": "Confirmar envío", - "confirm_silent_payments_switch_node": "Actualmente se requiere cambiar los nodos para escanear pagos silenciosos", + "confirm_silent_payments_switch_node": "Su nodo actual no admite pagos silenciosos \\ ncake billet cambiará a un nodo compatible, solo para escanear", "confirmations": "Confirmaciones", "confirmed": "Saldo confirmado", "confirmed_tx": "Confirmado", diff --git a/res/values/strings_fr.arb b/res/values/strings_fr.arb index 244238975..198111909 100644 --- a/res/values/strings_fr.arb +++ b/res/values/strings_fr.arb @@ -143,7 +143,7 @@ "confirm_fee_deduction": "Confirmer la déduction des frais", "confirm_fee_deduction_content": "Acceptez-vous de déduire les frais de la production?", "confirm_sending": "Confirmer l'envoi", - "confirm_silent_payments_switch_node": "Actuellement, il est nécessaire de changer de nœuds pour scanner les paiements silencieux", + "confirm_silent_payments_switch_node": "Votre nœud actuel ne prend pas en charge les paiements silencieux \\ ncake qui passera à un nœud compatible, juste pour la numérisation", "confirmations": "Confirmations", "confirmed": "Solde confirmé", "confirmed_tx": "Confirmé", diff --git a/res/values/strings_ha.arb b/res/values/strings_ha.arb index 292ce0614..4259162c2 100644 --- a/res/values/strings_ha.arb +++ b/res/values/strings_ha.arb @@ -143,7 +143,7 @@ "confirm_fee_deduction": "Tabbatar da cire kudade", "confirm_fee_deduction_content": "Shin kun yarda ku cire kuɗin daga fitarwa?", "confirm_sending": "Tabbatar da aikawa", - "confirm_silent_payments_switch_node": "A halin yanzu ana buƙatar sauya nodes don bincika biyan siliki", + "confirm_silent_payments_switch_node": "Kumburinku na yanzu ba ya goyan bayan biyan shiru da shiru \\ NCADA Wallet zai canza zuwa kumburi mai dacewa, don bincika", "confirmations": "Tabbatar", "confirmed": "An tabbatar", "confirmed_tx": "Tabbatar", diff --git a/res/values/strings_hi.arb b/res/values/strings_hi.arb index 3cfb5129a..01e9dc90e 100644 --- a/res/values/strings_hi.arb +++ b/res/values/strings_hi.arb @@ -143,7 +143,7 @@ "confirm_fee_deduction": "शुल्क कटौती की पुष्टि करें", "confirm_fee_deduction_content": "क्या आप आउटपुट से शुल्क में कटौती करने के लिए सहमत हैं?", "confirm_sending": "भेजने की पुष्टि करें", - "confirm_silent_payments_switch_node": "वर्तमान में मूक भुगतान को स्कैन करने के लिए नोड्स को स्विच करना आवश्यक है", + "confirm_silent_payments_switch_node": "आपका वर्तमान नोड मूक भुगतान का समर्थन नहीं करता है \\ ncake वॉलेट एक संगत नोड पर स्विच करेगा, बस स्कैनिंग के लिए", "confirmations": "पुष्टिकरण", "confirmed": "पुष्टि की गई शेष राशिी", "confirmed_tx": "की पुष्टि", diff --git a/res/values/strings_hr.arb b/res/values/strings_hr.arb index 5f8271504..7c9a521bf 100644 --- a/res/values/strings_hr.arb +++ b/res/values/strings_hr.arb @@ -143,7 +143,7 @@ "confirm_fee_deduction": "Potvrdite odbitak naknade", "confirm_fee_deduction_content": "Slažete li se da ćete odbiti naknadu od izlaza?", "confirm_sending": "Potvrdi slanje", - "confirm_silent_payments_switch_node": "Trenutno je potrebno prebaciti čvorove na skeniranje tihih plaćanja", + "confirm_silent_payments_switch_node": "Vaš trenutni čvor ne podržava tiha plaćanja \\ ncake novčanik prebacit će se na kompatibilni čvor, samo za skeniranje", "confirmations": "Potvrde", "confirmed": "Potvrđeno stanje", "confirmed_tx": "Potvrđen", diff --git a/res/values/strings_id.arb b/res/values/strings_id.arb index 9c8d91b90..0e6a894dd 100644 --- a/res/values/strings_id.arb +++ b/res/values/strings_id.arb @@ -143,7 +143,7 @@ "confirm_fee_deduction": "Konfirmasi pengurangan biaya", "confirm_fee_deduction_content": "Apakah Anda setuju untuk mengurangi biaya dari output?", "confirm_sending": "Konfirmasi pengiriman", - "confirm_silent_payments_switch_node": "Saat ini diminta untuk mengganti node untuk memindai pembayaran diam", + "confirm_silent_payments_switch_node": "Node Anda saat ini tidak mendukung pembayaran diam \\ ncake Wallet akan beralih ke simpul yang kompatibel, hanya untuk pemindaian", "confirmations": "Konfirmasi", "confirmed": "Saldo Terkonfirmasi", "confirmed_tx": "Dikonfirmasi", diff --git a/res/values/strings_it.arb b/res/values/strings_it.arb index db55845ef..3c937a96a 100644 --- a/res/values/strings_it.arb +++ b/res/values/strings_it.arb @@ -143,7 +143,7 @@ "confirm_fee_deduction": "Conferma la detrazione delle commissioni", "confirm_fee_deduction_content": "Accetti di detrarre la commissione dall'output?", "confirm_sending": "Conferma l'invio", - "confirm_silent_payments_switch_node": "Attualmente è necessario cambiare nodi per scansionare i pagamenti silenziosi", + "confirm_silent_payments_switch_node": "Il tuo nodo corrente non supporta i pagamenti silenziosi \\ ncake Wallet passerà a un nodo compatibile, solo per la scansione", "confirmations": "Conferme", "confirmed": "Saldo confermato", "confirmed_tx": "Confermato", diff --git a/res/values/strings_ja.arb b/res/values/strings_ja.arb index d24f0224d..1f914113d 100644 --- a/res/values/strings_ja.arb +++ b/res/values/strings_ja.arb @@ -143,7 +143,7 @@ "confirm_fee_deduction": "料金控除を確認します", "confirm_fee_deduction_content": "出力から料金を差し引くことに同意しますか?", "confirm_sending": "送信を確認", - "confirm_silent_payments_switch_node": "現在、ノードを切り替えてサイレント決済をスキャンする必要があります", + "confirm_silent_payments_switch_node": "現在のノードはサイレントペイメントをサポートしていません\\ ncakeウォレットは、スキャン用に互換性のあるノードに切り替えます", "confirmations": "確認", "confirmed": "確認済み残高", "confirmed_tx": "確認済み", diff --git a/res/values/strings_ko.arb b/res/values/strings_ko.arb index 262c40e8d..6f72497c7 100644 --- a/res/values/strings_ko.arb +++ b/res/values/strings_ko.arb @@ -143,7 +143,7 @@ "confirm_fee_deduction": "수수료 공제를 확인하십시오", "confirm_fee_deduction_content": "출력에서 수수료를 공제하는 데 동의하십니까?", "confirm_sending": "전송 확인", - "confirm_silent_payments_switch_node": "현재 사일런트 결제를 스캔하려면 노드를 전환해야합니다.", + "confirm_silent_payments_switch_node": "현재 노드는 무음 지불을 지원하지 않습니다 \\ ncake 지갑은 스캔을 위해 호환 가능한 노드로 전환됩니다.", "confirmations": "확인", "confirmed": "확인된 잔액", "confirmed_tx": "확인", diff --git a/res/values/strings_my.arb b/res/values/strings_my.arb index 4fd55684e..fa0937561 100644 --- a/res/values/strings_my.arb +++ b/res/values/strings_my.arb @@ -143,7 +143,7 @@ "confirm_fee_deduction": "အခကြေးငွေကိုနှုတ်ယူခြင်း", "confirm_fee_deduction_content": "output မှအခကြေးငွေကိုယူရန်သဘောတူပါသလား။", "confirm_sending": "ပေးပို့အတည်ပြုပါ။", - "confirm_silent_payments_switch_node": "လောလောဆယ်အသံတိတ်ငွေပေးချေမှုကိုစကင်ဖတ်စစ်ဆေးရန် node များကိုပြောင်းရန်လိုအပ်သည်", + "confirm_silent_payments_switch_node": "သင်၏လက်ရှိ node သည်အသံတိတ်ငွေပေးချေမှုကိုမပံ့ပိုးပါဟု \\ t", "confirmations": "အတည်ပြုချက်များ", "confirmed": "အတည်ပြုထားသော လက်ကျန်ငွေ", "confirmed_tx": "အတည်ပြုသည်", diff --git a/res/values/strings_nl.arb b/res/values/strings_nl.arb index 70379c95c..ebfa58377 100644 --- a/res/values/strings_nl.arb +++ b/res/values/strings_nl.arb @@ -143,7 +143,7 @@ "confirm_fee_deduction": "Bevestig de aftrek van de kosten", "confirm_fee_deduction_content": "Stemt u ermee in om de vergoeding af te trekken van de output?", "confirm_sending": "Bevestig verzending", - "confirm_silent_payments_switch_node": "Momenteel is het vereist om knooppunten te schakelen om stille betalingen te scannen", + "confirm_silent_payments_switch_node": "Uw huidige knooppunt ondersteunt geen stille betalingen \\ ncake -portemonnee schakelt over naar een compatibele knoop", "confirmations": "Bevestigingen", "confirmed": "Bevestigd saldo", "confirmed_tx": "Bevestigd", diff --git a/res/values/strings_pl.arb b/res/values/strings_pl.arb index 6d8f05fcf..ab49e165a 100644 --- a/res/values/strings_pl.arb +++ b/res/values/strings_pl.arb @@ -143,7 +143,7 @@ "confirm_fee_deduction": "Potwierdź odliczenie opłaty", "confirm_fee_deduction_content": "Czy zgadzasz się odliczyć opłatę od wyników?", "confirm_sending": "Potwierdź wysłanie", - "confirm_silent_payments_switch_node": "Obecnie wymagane jest zmiana węzłów w celu skanowania cichych płatności", + "confirm_silent_payments_switch_node": "Twój obecny węzeł nie obsługuje cichych płatności \\ NCAKE Portfel przełączy się na kompatybilny węzeł, tylko do skanowania", "confirmations": "Potwierdzenia", "confirmed": "Potwierdzone saldo", "confirmed_tx": "Potwierdzony", diff --git a/res/values/strings_pt.arb b/res/values/strings_pt.arb index 381514341..9536a1b24 100644 --- a/res/values/strings_pt.arb +++ b/res/values/strings_pt.arb @@ -143,7 +143,7 @@ "confirm_fee_deduction": "Confirme dedução da taxa", "confirm_fee_deduction_content": "Você concorda em deduzir a taxa da saída?", "confirm_sending": "Confirmar o envio", - "confirm_silent_payments_switch_node": "Atualmente, é necessário trocar de nós para digitalizar pagamentos silenciosos", + "confirm_silent_payments_switch_node": "Seu nó atual não suporta pagamentos silenciosos \\ Ncake Wallet mudará para um nó compatível, apenas para digitalização", "confirmations": "Confirmações", "confirmed": "Saldo Confirmado", "confirmed_tx": "Confirmado", diff --git a/res/values/strings_ru.arb b/res/values/strings_ru.arb index 8611b32f8..a95c09ca2 100644 --- a/res/values/strings_ru.arb +++ b/res/values/strings_ru.arb @@ -143,7 +143,7 @@ "confirm_fee_deduction": "Подтвердите вычет платы", "confirm_fee_deduction_content": "Согласны ли вы вычесть плату из вывода?", "confirm_sending": "Подтвердить отправку", - "confirm_silent_payments_switch_node": "В настоящее время требуется переключение узлов для сканирования молчаливых платежей", + "confirm_silent_payments_switch_node": "Ваш текущий узел не поддерживает Silent Payments \\ ncake Wallet переключится на совместимый узел, только для сканирования", "confirmations": "Подтверждения", "confirmed": "Подтвержденный баланс", "confirmed_tx": "Подтвержденный", diff --git a/res/values/strings_th.arb b/res/values/strings_th.arb index b1a96414d..5ff6b456c 100644 --- a/res/values/strings_th.arb +++ b/res/values/strings_th.arb @@ -143,7 +143,7 @@ "confirm_fee_deduction": "ยืนยันการหักค่าธรรมเนียม", "confirm_fee_deduction_content": "คุณตกลงที่จะหักค่าธรรมเนียมจากผลลัพธ์หรือไม่?", "confirm_sending": "ยืนยันการส่ง", - "confirm_silent_payments_switch_node": "ขณะนี้จำเป็นต้องเปลี่ยนโหนดเพื่อสแกนการชำระเงินแบบเงียบ", + "confirm_silent_payments_switch_node": "โหนดปัจจุบันของคุณไม่รองรับการชำระเงินแบบเงียบ \\ ncake กระเป๋าเงินจะเปลี่ยนเป็นโหนดที่เข้ากันได้เพียงเพื่อการสแกน", "confirmations": "การยืนยัน", "confirmed": "ยอดคงเหลือที่ยืนยันแล้ว", "confirmed_tx": "ซึ่งยืนยันแล้ว", diff --git a/res/values/strings_tl.arb b/res/values/strings_tl.arb index 5566e4b79..2839234c8 100644 --- a/res/values/strings_tl.arb +++ b/res/values/strings_tl.arb @@ -143,7 +143,7 @@ "confirm_fee_deduction": "Kumpirmahin ang pagbabawas ng bayad", "confirm_fee_deduction_content": "Sumasang -ayon ka bang bawasan ang bayad mula sa output?", "confirm_sending": "Kumpirmahin ang pagpapadala", - "confirm_silent_payments_switch_node": "Sa kasalukuyan kinakailangan itong lumipat ng mga node upang i -scan ang mga tahimik na pagbabayad", + "confirm_silent_payments_switch_node": "Ang iyong kasalukuyang node ay hindi sumusuporta sa tahimik na pagbabayad \\ ncake wallet ay lilipat sa isang katugmang node, para lamang sa pag -scan", "confirmations": "Mga kumpirmasyon", "confirmed": "Nakumpirma na balanse", "confirmed_tx": "Nakumpirma", diff --git a/res/values/strings_tr.arb b/res/values/strings_tr.arb index 8af93e5aa..e7d0b702d 100644 --- a/res/values/strings_tr.arb +++ b/res/values/strings_tr.arb @@ -143,7 +143,7 @@ "confirm_fee_deduction": "Ücret kesintisini onaylayın", "confirm_fee_deduction_content": "Ücreti çıktıdan düşürmeyi kabul ediyor musunuz?", "confirm_sending": "Göndermeyi onayla", - "confirm_silent_payments_switch_node": "Şu anda sessiz ödemeleri taramak için düğümleri değiştirmek gerekiyor", + "confirm_silent_payments_switch_node": "Mevcut düğümünüz sessiz ödemeleri desteklemiyor \\ nCake cüzdanı, sadece tarama için uyumlu bir düğüme geçecektir", "confirmations": "Onay", "confirmed": "Onaylanmış Bakiye", "confirmed_tx": "Onaylanmış", diff --git a/res/values/strings_uk.arb b/res/values/strings_uk.arb index 375b9c373..f858116cc 100644 --- a/res/values/strings_uk.arb +++ b/res/values/strings_uk.arb @@ -143,7 +143,7 @@ "confirm_fee_deduction": "Підтвердьте відрахування комісії", "confirm_fee_deduction_content": "Чи погоджуєтесь ви вирахувати комісію з сумми одержувача?", "confirm_sending": "Підтвердити відправлення", - "confirm_silent_payments_switch_node": "В даний час потрібно перемикати вузли на сканування мовчазних платежів", + "confirm_silent_payments_switch_node": "Ваш поточний вузол не підтримує мовчазні платежі \\ ncake Wallet перейде на сумісний вузол, лише для сканування", "confirmations": "Підтвердження", "confirmed": "Підтверджений баланс", "confirmed_tx": "Підтверджений", diff --git a/res/values/strings_ur.arb b/res/values/strings_ur.arb index 4f86a15b2..fc0351f4d 100644 --- a/res/values/strings_ur.arb +++ b/res/values/strings_ur.arb @@ -143,7 +143,7 @@ "confirm_fee_deduction": "فیس میں کٹوتی کی تصدیق کریں", "confirm_fee_deduction_content": "کیا آپ آؤٹ پٹ سے فیس کم کرنے پر راضی ہیں؟", "confirm_sending": "بھیجنے کی تصدیق کریں۔", - "confirm_silent_payments_switch_node": "فی الحال خاموش ادائیگیوں کو اسکین کرنے کے لئے نوڈس کو تبدیل کرنے کی ضرورت ہے", + "confirm_silent_payments_switch_node": "آپ کا موجودہ نوڈ خاموش ادائیگیوں کی حمایت نہیں کرتا ہے۔", "confirmations": "تصدیقات", "confirmed": "تصدیق شدہ بیلنس", "confirmed_tx": "تصدیق", diff --git a/res/values/strings_yo.arb b/res/values/strings_yo.arb index 1bdb1115c..19a98ba1a 100644 --- a/res/values/strings_yo.arb +++ b/res/values/strings_yo.arb @@ -143,7 +143,7 @@ "confirm_fee_deduction": "Jẹrisi iyọkuro owo", "confirm_fee_deduction_content": "Ṣe o gba lati yọkuro idiyele naa kuro ni iṣejade?", "confirm_sending": "Jẹ́rìí sí ránṣẹ́", - "confirm_silent_payments_switch_node": "Lọwọlọwọ o nilo lati yi awọn apa pada si awọn sisanwo ipalọlọ", + "confirm_silent_payments_switch_node": "Ilode rẹ ti lọwọlọwọ ko ṣe atilẹyin awọn sisanwo ti o dakẹ \\ owet apamọwọ yoo yipada si oju-ọrọ ibaramu, o kan fun Scning", "confirmations": "Àwọn ẹ̀rí", "confirmed": "A ti jẹ́rìí ẹ̀", "confirmed_tx": "Jẹrisi", diff --git a/res/values/strings_zh.arb b/res/values/strings_zh.arb index b3800f597..fee4f99ee 100644 --- a/res/values/strings_zh.arb +++ b/res/values/strings_zh.arb @@ -143,7 +143,7 @@ "confirm_fee_deduction": "确认费用扣除", "confirm_fee_deduction_content": "您是否同意从产出中扣除费用?", "confirm_sending": "确认发送", - "confirm_silent_payments_switch_node": "目前需要切换节点来扫描无声付款", + "confirm_silent_payments_switch_node": "您当前的节点不支持无声付款\\ ncake钱包将切换到兼容节点,仅用于扫描", "confirmations": "确认", "confirmed": "确认余额", "confirmed_tx": "确认的", diff --git a/tool/append_translation.dart b/tool/append_translation.dart index ac114bf3c..24778746c 100644 --- a/tool/append_translation.dart +++ b/tool/append_translation.dart @@ -2,6 +2,8 @@ import 'utils/translation/arb_file_utils.dart'; import 'utils/translation/translation_constants.dart'; import 'utils/translation/translation_utils.dart'; +/// flutter packages pub run tool/append_translation.dart "hello_world" "Hello World!" + void main(List args) async { if (args.length != 2) { throw Exception(