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
This commit is contained in:
Omar Hatem 2024-07-21 03:46:43 +03:00 committed by GitHub
parent 7514d851ce
commit 311fff2c44
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
45 changed files with 280 additions and 271 deletions

View file

@ -46,7 +46,7 @@ android {
defaultConfig { defaultConfig {
applicationId appProperties['id'] applicationId appProperties['id']
minSdkVersion 24 minSdkVersion 24
targetSdkVersion 33 targetSdkVersion 34
versionCode flutterVersionCode.toInteger() versionCode flutterVersionCode.toInteger()
versionName flutterVersionName versionName flutterVersionName
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"

View file

@ -224,6 +224,7 @@ abstract class ElectrumWalletAddressesBase extends WalletAddresses with Store {
updateAddressesByMatch(); updateAddressesByMatch();
updateReceiveAddresses(); updateReceiveAddresses();
updateChangeAddresses(); updateChangeAddresses();
_validateAddresses();
await updateAddressesInBox(); await updateAddressesInBox();
if (currentReceiveAddressIndex >= receiveAddresses.length) { if (currentReceiveAddressIndex >= receiveAddresses.length) {
@ -458,10 +459,6 @@ abstract class ElectrumWalletAddressesBase extends WalletAddresses with Store {
Future<void> discoverAddresses(List<BitcoinAddressRecord> addressList, bool isHidden, Future<void> discoverAddresses(List<BitcoinAddressRecord> addressList, bool isHidden,
Future<String?> Function(BitcoinAddressRecord) getAddressHistory, Future<String?> Function(BitcoinAddressRecord) getAddressHistory,
{BitcoinAddressType type = SegwitAddresType.p2wpkh}) async { {BitcoinAddressType type = SegwitAddresType.p2wpkh}) async {
if (!isHidden) {
_validateSideHdAddresses(addressList.toList());
}
final newAddresses = await _createNewAddresses(gap, final newAddresses = await _createNewAddresses(gap,
startIndex: addressList.length, isHidden: isHidden, type: type); startIndex: addressList.length, isHidden: isHidden, type: type);
addAddresses(newAddresses); addAddresses(newAddresses);
@ -541,11 +538,15 @@ abstract class ElectrumWalletAddressesBase extends WalletAddresses with Store {
updateAddressesByMatch(); updateAddressesByMatch();
} }
void _validateSideHdAddresses(List<BitcoinAddressRecord> addrWithTransactions) { void _validateAddresses() {
addrWithTransactions.forEach((element) { allAddresses.forEach((element) {
if (element.address != if (!element.isHidden && element.address !=
getAddress(index: element.index, hd: mainHd, addressType: element.type)) getAddress(index: element.index, hd: mainHd, addressType: element.type)) {
element.isHidden = true; element.isHidden = true;
} else if (element.isHidden && element.address !=
getAddress(index: element.index, hd: sideHd, addressType: element.type)) {
element.isHidden = false;
}
}); });
} }

View file

@ -281,7 +281,7 @@ class CryptoCurrency extends EnumerableItem<int> with Serializable<int> implemen
final s = 'Unexpected token: $name for CryptoCurrency fromFullName'; final s = 'Unexpected token: $name for CryptoCurrency fromFullName';
throw ArgumentError.value(name, 'Fullname', s); throw ArgumentError.value(name, 'Fullname', s);
} }
return CryptoCurrency._fullNameCurrencyMap[name.toLowerCase()]!; return CryptoCurrency._fullNameCurrencyMap[name.split("(").first.trim().toLowerCase()]!;
} }
@override @override

View file

@ -3,7 +3,7 @@ import 'package:cw_core/keyable.dart';
abstract class TransactionInfo extends Object with Keyable { abstract class TransactionInfo extends Object with Keyable {
late String id; late String id;
late String txhash = id; late String txHash = id;
late int amount; late int amount;
int? fee; int? fee;
late TransactionDirection direction; late TransactionDirection direction;

View file

@ -124,8 +124,7 @@ abstract class MoneroSubaddressListBase with Store {
Future<List<Subaddress>> _getAllUnusedAddresses( Future<List<Subaddress>> _getAllUnusedAddresses(
{required int accountIndex, required String label}) async { {required int accountIndex, required String label}) async {
final allAddresses = subaddress_list.getAllSubaddresses(); final allAddresses = subaddress_list.getAllSubaddresses();
final lastAddress = allAddresses.length == 0 ? allAddresses.last.address : Subaddress(id: -1, address: "", label: ""); if (allAddresses.isEmpty || _usedAddresses.contains(allAddresses.last)) {
if (allAddresses.isEmpty || _usedAddresses.contains(lastAddress)) {
final isAddressUnused = await _newSubaddress(accountIndex: accountIndex, label: label); final isAddressUnused = await _newSubaddress(accountIndex: accountIndex, label: label);
if (!isAddressUnused) { if (!isAddressUnused) {
return await _getAllUnusedAddresses(accountIndex: accountIndex, label: label); return await _getAllUnusedAddresses(accountIndex: accountIndex, label: label);

View file

@ -9,14 +9,14 @@ import 'package:cw_core/format_amount.dart';
import 'package:cw_monero/api/transaction_history.dart'; import 'package:cw_monero/api/transaction_history.dart';
class MoneroTransactionInfo extends TransactionInfo { 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.isPending, this.amount, this.accountIndex, this.addressIndex, this.fee,
this.confirmations) : this.confirmations) :
id = "${txhash}_${amount}_${accountIndex}_${addressIndex}"; id = "${txHash}_${amount}_${accountIndex}_${addressIndex}";
MoneroTransactionInfo.fromMap(Map<String, Object?> map) MoneroTransactionInfo.fromMap(Map<String, Object?> map)
: id = "${map['hash']}_${map['amount']}_${map['accountIndex']}_${map['addressIndex']}", : 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, height = (map['height'] ?? 0) as int,
direction = map['direction'] != null direction = map['direction'] != null
? parseTransactionDirectionFromNumber(map['direction'] as String) ? parseTransactionDirectionFromNumber(map['direction'] as String)
@ -39,7 +39,7 @@ class MoneroTransactionInfo extends TransactionInfo {
MoneroTransactionInfo.fromRow(TransactionInfoRow row) MoneroTransactionInfo.fromRow(TransactionInfoRow row)
: id = "${row.getHash()}_${row.getAmount()}_${row.subaddrAccount}_${row.subaddrIndex}", : id = "${row.getHash()}_${row.getAmount()}_${row.subaddrAccount}_${row.subaddrIndex}",
txhash = row.getHash(), txHash = row.getHash(),
height = row.blockHeight, height = row.blockHeight,
direction = parseTransactionDirectionFromInt(row.direction), direction = parseTransactionDirectionFromInt(row.direction),
date = DateTime.fromMillisecondsSinceEpoch(row.getDatetime() * 1000), date = DateTime.fromMillisecondsSinceEpoch(row.getDatetime() * 1000),
@ -58,7 +58,7 @@ class MoneroTransactionInfo extends TransactionInfo {
} }
final String id; final String id;
final String txhash; final String txHash;
final int height; final int height;
final TransactionDirection direction; final TransactionDirection direction;
final DateTime date; final DateTime date;

View file

@ -7,14 +7,14 @@ import 'package:cw_core/format_amount.dart';
import 'package:cw_wownero/api/transaction_history.dart'; import 'package:cw_wownero/api/transaction_history.dart';
class WowneroTransactionInfo extends TransactionInfo { 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.isPending, this.amount, this.accountIndex, this.addressIndex, this.fee,
this.confirmations) : this.confirmations) :
id = "${txhash}_${amount}_${accountIndex}_${addressIndex}"; id = "${txHash}_${amount}_${accountIndex}_${addressIndex}";
WowneroTransactionInfo.fromMap(Map<String, Object?> map) WowneroTransactionInfo.fromMap(Map<String, Object?> map)
: id = "${map['hash']}_${map['amount']}_${map['accountIndex']}_${map['addressIndex']}", : 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, height = (map['height'] ?? 0) as int,
direction = map['direction'] != null direction = map['direction'] != null
? parseTransactionDirectionFromNumber(map['direction'] as String) ? parseTransactionDirectionFromNumber(map['direction'] as String)
@ -37,7 +37,7 @@ class WowneroTransactionInfo extends TransactionInfo {
WowneroTransactionInfo.fromRow(TransactionInfoRow row) WowneroTransactionInfo.fromRow(TransactionInfoRow row)
: id = "${row.getHash()}_${row.getAmount()}_${row.subaddrAccount}_${row.subaddrIndex}", : id = "${row.getHash()}_${row.getAmount()}_${row.subaddrAccount}_${row.subaddrIndex}",
txhash = row.getHash(), txHash = row.getHash(),
height = row.blockHeight, height = row.blockHeight,
direction = parseTransactionDirectionFromInt(row.direction), direction = parseTransactionDirectionFromInt(row.direction),
date = DateTime.fromMillisecondsSinceEpoch(row.getDatetime() * 1000), date = DateTime.fromMillisecondsSinceEpoch(row.getDatetime() * 1000),
@ -56,7 +56,7 @@ class WowneroTransactionInfo extends TransactionInfo {
} }
final String id; final String id;
final String txhash; final String txHash;
final int height; final int height;
final TransactionDirection direction; final TransactionDirection direction;
final DateTime date; final DateTime date;

View file

@ -560,7 +560,7 @@ class CWBitcoin extends Bitcoin {
if (tweaksResponse != null) { if (tweaksResponse != null) {
return true; return true;
} }
} on RequestFailedTimeoutException { } on RequestFailedTimeoutException catch (_) {
return false; return false;
} catch (_) { } catch (_) {
rethrow; rethrow;

View file

@ -149,10 +149,9 @@ class MoonPayProvider extends BuyProvider {
'colorCode': settingsStore.currentTheme.type == ThemeType.dark 'colorCode': settingsStore.currentTheme.type == ThemeType.dark
? '#${Palette.blueCraiola.value.toRadixString(16).substring(2, 8)}' ? '#${Palette.blueCraiola.value.toRadixString(16).substring(2, 8)}'
: '#${Palette.moderateSlateBlue.value.toRadixString(16).substring(2, 8)}', : '#${Palette.moderateSlateBlue.value.toRadixString(16).substring(2, 8)}',
'defaultCurrencyCode': _normalizeCurrency(currency), 'baseCurrencyCode': settingsStore.fiatCurrency.title,
'baseCurrencyCode': _normalizeCurrency(currency),
'baseCurrencyAmount': amount ?? '0', 'baseCurrencyAmount': amount ?? '0',
'currencyCode': currencyCode, 'currencyCode': _normalizeCurrency(currency),
'walletAddress': walletAddress, 'walletAddress': walletAddress,
'lockAmount': 'false', 'lockAmount': 'false',
'showAllCurrencies': 'false', 'showAllCurrencies': 'false',

View file

@ -67,9 +67,8 @@ class ProvidersHelper {
]; ];
case WalletType.litecoin: case WalletType.litecoin:
case WalletType.bitcoinCash: case WalletType.bitcoinCash:
return [ProviderType.askEachTime, ProviderType.onramper, ProviderType.robinhood, ProviderType.moonpay];
case WalletType.solana: case WalletType.solana:
return [ProviderType.askEachTime, ProviderType.onramper, ProviderType.robinhood]; return [ProviderType.askEachTime, ProviderType.onramper, ProviderType.robinhood, ProviderType.moonpay];
case WalletType.tron: case WalletType.tron:
return [ return [
ProviderType.askEachTime, ProviderType.askEachTime,

View file

@ -340,7 +340,7 @@ class CryptoBalanceWidget extends StatelessWidget {
builder: (BuildContext context) => AlertWithTwoActions( builder: (BuildContext context) => AlertWithTwoActions(
alertTitle: S.of(context).change_current_node_title, alertTitle: S.of(context).change_current_node_title,
alertContent: S.of(context).confirm_silent_payments_switch_node, alertContent: S.of(context).confirm_silent_payments_switch_node,
rightButtonText: S.of(context).ok, rightButtonText: S.of(context).confirm,
leftButtonText: S.of(context).cancel, leftButtonText: S.of(context).cancel,
actionRightButton: () { actionRightButton: () {
dashboardViewModel.setSilentPaymentsScanning(newValue); dashboardViewModel.setSilentPaymentsScanning(newValue);

View file

@ -22,7 +22,10 @@ class RescanPage extends BasePage {
@override @override
Widget body(BuildContext context) { Widget body(BuildContext context) {
return Padding( return GestureDetector(
behavior: HitTestBehavior.opaque,
onTap: () => FocusScope.of(context).unfocus(),
child: Padding(
padding: EdgeInsets.only(left: 24, right: 24, bottom: 24), padding: EdgeInsets.only(left: 24, right: 24, bottom: 24),
child: Column(mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ child: Column(mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [
Observer( Observer(
@ -54,6 +57,7 @@ class RescanPage extends BasePage {
isDisabled: !_rescanViewModel.isButtonEnabled, isDisabled: !_rescanViewModel.isButtonEnabled,
)) ))
]), ]),
),
); );
} }
@ -71,7 +75,7 @@ class RescanPage extends BasePage {
builder: (BuildContext _dialogContext) => AlertWithTwoActions( builder: (BuildContext _dialogContext) => AlertWithTwoActions(
alertTitle: S.of(_dialogContext).change_current_node_title, alertTitle: S.of(_dialogContext).change_current_node_title,
alertContent: S.of(_dialogContext).confirm_silent_payments_switch_node, alertContent: S.of(_dialogContext).confirm_silent_payments_switch_node,
rightButtonText: S.of(_dialogContext).ok, rightButtonText: S.of(_dialogContext).confirm,
leftButtonText: S.of(_dialogContext).cancel, leftButtonText: S.of(_dialogContext).cancel,
actionRightButton: () async { actionRightButton: () async {
Navigator.of(_dialogContext).pop(); Navigator.of(_dialogContext).pop();

View file

@ -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/extensions/cake_text_theme.dart';
import 'package:cake_wallet/themes/theme_base.dart'; import 'package:cake_wallet/themes/theme_base.dart';
import 'package:cake_wallet/utils/responsive_layout_util.dart'; import 'package:cake_wallet/utils/responsive_layout_util.dart';
@ -49,28 +50,24 @@ class WelcomePage extends BasePage {
@override @override
Widget body(BuildContext context) { Widget body(BuildContext context) {
final welcomeImage = currentTheme.type == ThemeType.dark final welcomeImage = currentTheme.type == ThemeType.dark ? welcomeImageDark : welcomeImageLight;
? welcomeImageDark
: welcomeImageLight;
final newWalletImage = Image.asset('assets/images/new_wallet.png', final newWalletImage = Image.asset('assets/images/new_wallet.png',
height: 12, height: 12,
width: 12, width: 12,
color: Theme.of(context).extension<WalletListTheme>()!.restoreWalletButtonTextColor); color: Theme.of(context).extension<WalletListTheme>()!.restoreWalletButtonTextColor);
final restoreWalletImage = Image.asset('assets/images/restore_wallet.png', final restoreWalletImage = Image.asset('assets/images/restore_wallet.png',
height: 12, height: 12, width: 12, color: Theme.of(context).extension<CakeTextTheme>()!.titleColor);
width: 12,
color: Theme.of(context).extension<CakeTextTheme>()!.titleColor);
return WillPopScope( return WillPopScope(
onWillPop: () async => false, onWillPop: () async => false,
child: Container( child: ScrollableWithBottomSection(
content: Container(
alignment: Alignment.center, alignment: Alignment.center,
padding: EdgeInsets.only(top: 64, bottom: 24, left: 24, right: 24), padding: EdgeInsets.only(top: 64, bottom: 24, left: 24, right: 24),
child: ConstrainedBox( child: ConstrainedBox(
constraints: BoxConstraints( constraints:
maxWidth: ResponsiveLayoutUtilBase.kDesktopMaxWidthConstraint), BoxConstraints(maxWidth: ResponsiveLayoutUtilBase.kDesktopMaxWidthConstraint),
child: Column( child: Column(
mainAxisAlignment: MainAxisAlignment.spaceBetween, mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: <Widget>[ children: <Widget>[
@ -78,8 +75,7 @@ class WelcomePage extends BasePage {
children: <Widget>[ children: <Widget>[
AspectRatio( AspectRatio(
aspectRatio: aspectRatioImage, aspectRatio: aspectRatioImage,
child: FittedBox( child: FittedBox(child: welcomeImage, fit: BoxFit.contain),
child: welcomeImage, fit: BoxFit.contain),
), ),
Padding( Padding(
padding: EdgeInsets.only(top: 24), padding: EdgeInsets.only(top: 24),
@ -119,7 +115,11 @@ class WelcomePage extends BasePage {
), ),
], ],
), ),
Column( ],
),
),
),
bottomSection: Column(
children: <Widget>[ children: <Widget>[
Text( Text(
S.of(context).please_make_selection, S.of(context).please_make_selection,
@ -133,21 +133,21 @@ class WelcomePage extends BasePage {
Padding( Padding(
padding: EdgeInsets.only(top: 24), padding: EdgeInsets.only(top: 24),
child: PrimaryImageButton( child: PrimaryImageButton(
onPressed: () => Navigator.pushNamed( onPressed: () => Navigator.pushNamed(context, Routes.newWalletFromWelcome),
context, Routes.newWalletFromWelcome),
image: newWalletImage, image: newWalletImage,
text: S.of(context).create_new, text: S.of(context).create_new,
color: Theme.of(context).extension<WalletListTheme>()!.createNewWalletButtonBackgroundColor, color: Theme.of(context)
textColor: Theme.of(context).extension<WalletListTheme>()!.restoreWalletButtonTextColor, .extension<WalletListTheme>()!
.createNewWalletButtonBackgroundColor,
textColor:
Theme.of(context).extension<WalletListTheme>()!.restoreWalletButtonTextColor,
), ),
), ),
Padding( Padding(
padding: EdgeInsets.only(top: 10), padding: EdgeInsets.only(top: 10),
child: PrimaryImageButton( child: PrimaryImageButton(
onPressed: () { onPressed: () {
Navigator.pushNamed( Navigator.pushNamed(context, Routes.restoreOptions, arguments: true);
context, Routes.restoreOptions,
arguments: true);
}, },
image: restoreWalletImage, image: restoreWalletImage,
text: S.of(context).restore_wallet, text: S.of(context).restore_wallet,
@ -155,9 +155,8 @@ class WelcomePage extends BasePage {
textColor: Theme.of(context).extension<CakeTextTheme>()!.titleColor), textColor: Theme.of(context).extension<CakeTextTheme>()!.titleColor),
) )
], ],
)
],
), ),
))); ),
);
} }
} }

View file

@ -65,7 +65,10 @@ class BlockchainHeightState extends State<BlockchainHeightWidget> {
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
return Column( return GestureDetector(
behavior: HitTestBehavior.opaque,
onTap: () => FocusScope.of(context).unfocus(),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start, crossAxisAlignment: CrossAxisAlignment.start,
children: <Widget>[ children: <Widget>[
Row( Row(
@ -148,6 +151,7 @@ class BlockchainHeightState extends State<BlockchainHeightWidget> {
) )
] ]
], ],
),
); );
} }

View file

@ -1184,9 +1184,11 @@ abstract class SettingsStoreBase with Store {
raw: sharedPreferences.getInt(PreferencesKey.moneroTransactionPriority)!) ?? raw: sharedPreferences.getInt(PreferencesKey.moneroTransactionPriority)!) ??
priority[WalletType.monero]!; priority[WalletType.monero]!;
priority[WalletType.wownero] = wownero?.deserializeWowneroTransactionPriority( if (wownero != null &&
raw: sharedPreferences.getInt(PreferencesKey.wowneroTransactionPriority)!) ?? sharedPreferences.getInt(PreferencesKey.wowneroTransactionPriority) != null) {
priority[WalletType.wownero]!; priority[WalletType.wownero] = wownero!.deserializeWowneroTransactionPriority(
raw: sharedPreferences.getInt(PreferencesKey.wowneroTransactionPriority)!);
}
if (bitcoin != null && if (bitcoin != null &&
sharedPreferences.getInt(PreferencesKey.bitcoinTransactionPriority) != null) { sharedPreferences.getInt(PreferencesKey.bitcoinTransactionPriority) != null) {

View file

@ -61,7 +61,7 @@ abstract class BalanceViewModelBase with Store {
WalletBase<Balance, TransactionHistoryBase<TransactionInfo>, TransactionInfo> wallet; WalletBase<Balance, TransactionHistoryBase<TransactionInfo>, TransactionInfo> wallet;
@computed @computed
bool get hasSilentPayments => wallet.type == WalletType.bitcoin; bool get hasSilentPayments => wallet.type == WalletType.bitcoin && !wallet.isHardwareWallet;
@computed @computed
double get price { double get price {

View file

@ -308,7 +308,7 @@ abstract class DashboardViewModelBase with Store {
wallet.type == WalletType.haven; wallet.type == WalletType.haven;
@computed @computed
bool get hasSilentPayments => wallet.type == WalletType.bitcoin; bool get hasSilentPayments => wallet.type == WalletType.bitcoin && !wallet.isHardwareWallet;
@computed @computed
bool get showSilentPaymentsCard => hasSilentPayments && settingsStore.silentPaymentsCardDisplay; bool get showSilentPaymentsCard => hasSilentPayments && settingsStore.silentPaymentsCardDisplay;

View file

@ -86,7 +86,7 @@ abstract class TransactionDetailsViewModelBase with Store {
if (showRecipientAddress && !isRecipientAddressShown) { if (showRecipientAddress && !isRecipientAddressShown) {
try { try {
final recipientAddress = transactionDescriptionBox.values final recipientAddress = transactionDescriptionBox.values
.firstWhere((val) => val.id == transactionInfo.id) .firstWhere((val) => val.id == transactionInfo.txHash)
.recipientAddress; .recipientAddress;
if (recipientAddress?.isNotEmpty ?? false) { if (recipientAddress?.isNotEmpty ?? false) {
@ -105,14 +105,14 @@ abstract class TransactionDetailsViewModelBase with Store {
value: _explorerDescription(type), value: _explorerDescription(type),
onTap: () async { onTap: () async {
try { 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); if (await canLaunchUrl(uri)) await launchUrl(uri, mode: LaunchMode.externalApplication);
} catch (e) {} } catch (e) {}
})); }));
final description = transactionDescriptionBox.values.firstWhere( final description = transactionDescriptionBox.values.firstWhere(
(val) => val.id == transactionInfo.id, (val) => val.id == transactionInfo.txHash,
orElse: () => TransactionDescription(id: transactionInfo.id)); orElse: () => TransactionDescription(id: transactionInfo.txHash));
items.add(TextFieldListItem( items.add(TextFieldListItem(
title: S.current.note_tap_to_change, title: S.current.note_tap_to_change,
@ -214,7 +214,7 @@ abstract class TransactionDetailsViewModelBase with Store {
final addressIndex = tx.additionalInfo['addressIndex'] as int; final addressIndex = tx.additionalInfo['addressIndex'] as int;
final feeFormatted = tx.feeFormatted(); final feeFormatted = tx.feeFormatted();
final _items = [ 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( StandartListItem(
title: S.current.transaction_details_date, value: dateFormat.format(tx.date)), title: S.current.transaction_details_date, value: dateFormat.format(tx.date)),
StandartListItem(title: S.current.transaction_details_height, value: '${tx.height}'), 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) { void _addElectrumListItems(TransactionInfo tx, DateFormat dateFormat) {
final _items = [ 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( StandartListItem(
title: S.current.transaction_details_date, value: dateFormat.format(tx.date)), title: S.current.transaction_details_date, value: dateFormat.format(tx.date)),
StandartListItem(title: S.current.confirmations, value: tx.confirmations.toString()), StandartListItem(title: S.current.confirmations, value: tx.confirmations.toString()),
@ -265,7 +265,7 @@ abstract class TransactionDetailsViewModelBase with Store {
void _addHavenListItems(TransactionInfo tx, DateFormat dateFormat) { void _addHavenListItems(TransactionInfo tx, DateFormat dateFormat) {
items.addAll([ 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( StandartListItem(
title: S.current.transaction_details_date, value: dateFormat.format(tx.date)), title: S.current.transaction_details_date, value: dateFormat.format(tx.date)),
StandartListItem(title: S.current.transaction_details_height, value: '${tx.height}'), 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) { void _addEthereumListItems(TransactionInfo tx, DateFormat dateFormat) {
final _items = [ 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( StandartListItem(
title: S.current.transaction_details_date, value: dateFormat.format(tx.date)), title: S.current.transaction_details_date, value: dateFormat.format(tx.date)),
StandartListItem(title: S.current.confirmations, value: tx.confirmations.toString()), StandartListItem(title: S.current.confirmations, value: tx.confirmations.toString()),
@ -296,7 +296,7 @@ abstract class TransactionDetailsViewModelBase with Store {
void _addNanoListItems(TransactionInfo tx, DateFormat dateFormat) { void _addNanoListItems(TransactionInfo tx, DateFormat dateFormat) {
final _items = [ 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) if (showRecipientAddress && tx.to != null)
StandartListItem(title: S.current.transaction_details_recipient_address, value: tx.to!), StandartListItem(title: S.current.transaction_details_recipient_address, value: tx.to!),
if (showRecipientAddress && tx.from != null) if (showRecipientAddress && tx.from != null)
@ -313,7 +313,7 @@ abstract class TransactionDetailsViewModelBase with Store {
void _addPolygonListItems(TransactionInfo tx, DateFormat dateFormat) { void _addPolygonListItems(TransactionInfo tx, DateFormat dateFormat) {
final _items = [ 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( StandartListItem(
title: S.current.transaction_details_date, value: dateFormat.format(tx.date)), title: S.current.transaction_details_date, value: dateFormat.format(tx.date)),
StandartListItem(title: S.current.confirmations, value: tx.confirmations.toString()), StandartListItem(title: S.current.confirmations, value: tx.confirmations.toString()),
@ -332,7 +332,7 @@ abstract class TransactionDetailsViewModelBase with Store {
void _addSolanaListItems(TransactionInfo tx, DateFormat dateFormat) { void _addSolanaListItems(TransactionInfo tx, DateFormat dateFormat) {
final _items = [ 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( StandartListItem(
title: S.current.transaction_details_date, value: dateFormat.format(tx.date)), title: S.current.transaction_details_date, value: dateFormat.format(tx.date)),
StandartListItem(title: S.current.transaction_details_amount, value: tx.amountFormatted()), 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) { void _addTronListItems(TransactionInfo tx, DateFormat dateFormat) {
final _items = [ 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( StandartListItem(
title: S.current.transaction_details_date, value: dateFormat.format(tx.date)), title: S.current.transaction_details_date, value: dateFormat.format(tx.date)),
StandartListItem(title: S.current.transaction_details_amount, value: tx.amountFormatted()), 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 addressIndex = tx.additionalInfo['addressIndex'] as int;
final feeFormatted = tx.feeFormatted(); final feeFormatted = tx.feeFormatted();
final _items = [ 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( StandartListItem(
title: S.current.transaction_details_date, value: dateFormat.format(tx.date)), title: S.current.transaction_details_date, value: dateFormat.format(tx.date)),
StandartListItem(title: S.current.transaction_details_height, value: '${tx.height}'), StandartListItem(title: S.current.transaction_details_height, value: '${tx.height}'),

View file

@ -143,7 +143,7 @@
"confirm_fee_deduction": "تأكيد خصم الرسوم", "confirm_fee_deduction": "تأكيد خصم الرسوم",
"confirm_fee_deduction_content": "هل توافق على خصم الرسوم من الإخراج؟", "confirm_fee_deduction_content": "هل توافق على خصم الرسوم من الإخراج؟",
"confirm_sending": "تأكيد الإرسال", "confirm_sending": "تأكيد الإرسال",
"confirm_silent_payments_switch_node": "حاليا مطلوب لتبديل العقد لمسح المدفوعات الصامتة", "confirm_silent_payments_switch_node": "العقدة الحالية لا تدعم المدفوعات الصامتة \\ ncake wallet سوف تتحول إلى عقدة متوافقة ، فقط للمسح الضوئي",
"confirmations": "التأكيدات", "confirmations": "التأكيدات",
"confirmed": "رصيد مؤكد", "confirmed": "رصيد مؤكد",
"confirmed_tx": "مؤكد", "confirmed_tx": "مؤكد",

View file

@ -143,7 +143,7 @@
"confirm_fee_deduction": "Потвърдете приспадането на таксите", "confirm_fee_deduction": "Потвърдете приспадането на таксите",
"confirm_fee_deduction_content": "Съгласни ли сте да приспадате таксата от продукцията?", "confirm_fee_deduction_content": "Съгласни ли сте да приспадате таксата от продукцията?",
"confirm_sending": "Потвърждаване на изпращането", "confirm_sending": "Потвърждаване на изпращането",
"confirm_silent_payments_switch_node": "Понастоящем се изисква да превключвате възлите за сканиране на мълчаливи плащания", "confirm_silent_payments_switch_node": "Текущият ви възел не поддържа Silent Payments \\ Ncake Wallet ще премине към съвместим възел, само за сканиране",
"confirmations": "потвърждения", "confirmations": "потвърждения",
"confirmed": "Потвърден баланс", "confirmed": "Потвърден баланс",
"confirmed_tx": "Потвърдено", "confirmed_tx": "Потвърдено",

View file

@ -143,7 +143,7 @@
"confirm_fee_deduction": "Potvrďte odpočet poplatků", "confirm_fee_deduction": "Potvrďte odpočet poplatků",
"confirm_fee_deduction_content": "Souhlasíte s odečtením poplatku z výstupu?", "confirm_fee_deduction_content": "Souhlasíte s odečtením poplatku z výstupu?",
"confirm_sending": "Potvrdit odeslání", "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í", "confirmations": "Potvrzení",
"confirmed": "Potvrzený zůstatek", "confirmed": "Potvrzený zůstatek",
"confirmed_tx": "Potvrzeno", "confirmed_tx": "Potvrzeno",

View file

@ -143,7 +143,7 @@
"confirm_fee_deduction": "Gebührenabzug bestätigen", "confirm_fee_deduction": "Gebührenabzug bestätigen",
"confirm_fee_deduction_content": "Stimmen Sie zu, die Gebühr von der Ausgabe abzuziehen?", "confirm_fee_deduction_content": "Stimmen Sie zu, die Gebühr von der Ausgabe abzuziehen?",
"confirm_sending": "Senden bestätigen", "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", "confirmations": "Bestätigungen",
"confirmed": "Bestätigter Saldo", "confirmed": "Bestätigter Saldo",
"confirmed_tx": "Bestätigt", "confirmed_tx": "Bestätigt",

View file

@ -143,7 +143,7 @@
"confirm_fee_deduction": "Confirm Fee Deduction", "confirm_fee_deduction": "Confirm Fee Deduction",
"confirm_fee_deduction_content": "Do you agree to deduct the fee from the output?", "confirm_fee_deduction_content": "Do you agree to deduct the fee from the output?",
"confirm_sending": "Confirm sending", "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", "confirmations": "Confirmations",
"confirmed": "Confirmed Balance", "confirmed": "Confirmed Balance",
"confirmed_tx": "Confirmed", "confirmed_tx": "Confirmed",

View file

@ -143,7 +143,7 @@
"confirm_fee_deduction": "Confirmar la deducción de la tarifa", "confirm_fee_deduction": "Confirmar la deducción de la tarifa",
"confirm_fee_deduction_content": "¿Acepta deducir la tarifa de la producción?", "confirm_fee_deduction_content": "¿Acepta deducir la tarifa de la producción?",
"confirm_sending": "Confirmar envío", "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", "confirmations": "Confirmaciones",
"confirmed": "Saldo confirmado", "confirmed": "Saldo confirmado",
"confirmed_tx": "Confirmado", "confirmed_tx": "Confirmado",

View file

@ -143,7 +143,7 @@
"confirm_fee_deduction": "Confirmer la déduction des frais", "confirm_fee_deduction": "Confirmer la déduction des frais",
"confirm_fee_deduction_content": "Acceptez-vous de déduire les frais de la production?", "confirm_fee_deduction_content": "Acceptez-vous de déduire les frais de la production?",
"confirm_sending": "Confirmer l'envoi", "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", "confirmations": "Confirmations",
"confirmed": "Solde confirmé", "confirmed": "Solde confirmé",
"confirmed_tx": "Confirmé", "confirmed_tx": "Confirmé",

View file

@ -143,7 +143,7 @@
"confirm_fee_deduction": "Tabbatar da cire kudade", "confirm_fee_deduction": "Tabbatar da cire kudade",
"confirm_fee_deduction_content": "Shin kun yarda ku cire kuɗin daga fitarwa?", "confirm_fee_deduction_content": "Shin kun yarda ku cire kuɗin daga fitarwa?",
"confirm_sending": "Tabbatar da aikawa", "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", "confirmations": "Tabbatar",
"confirmed": "An tabbatar", "confirmed": "An tabbatar",
"confirmed_tx": "Tabbatar", "confirmed_tx": "Tabbatar",

View file

@ -143,7 +143,7 @@
"confirm_fee_deduction": "शुल्क कटौती की पुष्टि करें", "confirm_fee_deduction": "शुल्क कटौती की पुष्टि करें",
"confirm_fee_deduction_content": "क्या आप आउटपुट से शुल्क में कटौती करने के लिए सहमत हैं?", "confirm_fee_deduction_content": "क्या आप आउटपुट से शुल्क में कटौती करने के लिए सहमत हैं?",
"confirm_sending": "भेजने की पुष्टि करें", "confirm_sending": "भेजने की पुष्टि करें",
"confirm_silent_payments_switch_node": "वर्तमान में मूक भुगतान को स्कैन करने के लिए नोड्स को स्विच करना आवश्यक है", "confirm_silent_payments_switch_node": "आपका वर्तमान नोड मूक भुगतान का समर्थन नहीं करता है \\ ncake वॉलेट एक संगत नोड पर स्विच करेगा, बस स्कैनिंग के लिए",
"confirmations": "पुष्टिकरण", "confirmations": "पुष्टिकरण",
"confirmed": "पुष्टि की गई शेष राशिी", "confirmed": "पुष्टि की गई शेष राशिी",
"confirmed_tx": "की पुष्टि", "confirmed_tx": "की पुष्टि",

View file

@ -143,7 +143,7 @@
"confirm_fee_deduction": "Potvrdite odbitak naknade", "confirm_fee_deduction": "Potvrdite odbitak naknade",
"confirm_fee_deduction_content": "Slažete li se da ćete odbiti naknadu od izlaza?", "confirm_fee_deduction_content": "Slažete li se da ćete odbiti naknadu od izlaza?",
"confirm_sending": "Potvrdi slanje", "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", "confirmations": "Potvrde",
"confirmed": "Potvrđeno stanje", "confirmed": "Potvrđeno stanje",
"confirmed_tx": "Potvrđen", "confirmed_tx": "Potvrđen",

View file

@ -143,7 +143,7 @@
"confirm_fee_deduction": "Konfirmasi pengurangan biaya", "confirm_fee_deduction": "Konfirmasi pengurangan biaya",
"confirm_fee_deduction_content": "Apakah Anda setuju untuk mengurangi biaya dari output?", "confirm_fee_deduction_content": "Apakah Anda setuju untuk mengurangi biaya dari output?",
"confirm_sending": "Konfirmasi pengiriman", "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", "confirmations": "Konfirmasi",
"confirmed": "Saldo Terkonfirmasi", "confirmed": "Saldo Terkonfirmasi",
"confirmed_tx": "Dikonfirmasi", "confirmed_tx": "Dikonfirmasi",

View file

@ -143,7 +143,7 @@
"confirm_fee_deduction": "Conferma la detrazione delle commissioni", "confirm_fee_deduction": "Conferma la detrazione delle commissioni",
"confirm_fee_deduction_content": "Accetti di detrarre la commissione dall'output?", "confirm_fee_deduction_content": "Accetti di detrarre la commissione dall'output?",
"confirm_sending": "Conferma l'invio", "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", "confirmations": "Conferme",
"confirmed": "Saldo confermato", "confirmed": "Saldo confermato",
"confirmed_tx": "Confermato", "confirmed_tx": "Confermato",

View file

@ -143,7 +143,7 @@
"confirm_fee_deduction": "料金控除を確認します", "confirm_fee_deduction": "料金控除を確認します",
"confirm_fee_deduction_content": "出力から料金を差し引くことに同意しますか?", "confirm_fee_deduction_content": "出力から料金を差し引くことに同意しますか?",
"confirm_sending": "送信を確認", "confirm_sending": "送信を確認",
"confirm_silent_payments_switch_node": "現在、ノードを切り替えてサイレント決済をスキャンする必要があります", "confirm_silent_payments_switch_node": "現在のノードはサイレントペイメントをサポートしていません\\ ncakeウォレットは、スキャン用に互換性のあるードに切り替えます",
"confirmations": "確認", "confirmations": "確認",
"confirmed": "確認済み残高", "confirmed": "確認済み残高",
"confirmed_tx": "確認済み", "confirmed_tx": "確認済み",

View file

@ -143,7 +143,7 @@
"confirm_fee_deduction": "수수료 공제를 확인하십시오", "confirm_fee_deduction": "수수료 공제를 확인하십시오",
"confirm_fee_deduction_content": "출력에서 수수료를 공제하는 데 동의하십니까?", "confirm_fee_deduction_content": "출력에서 수수료를 공제하는 데 동의하십니까?",
"confirm_sending": "전송 확인", "confirm_sending": "전송 확인",
"confirm_silent_payments_switch_node": "현재 사일런트 결제를 스캔하려면 노드를 전환해야합니다.", "confirm_silent_payments_switch_node": "현재 노드는 무음 지불을 지원하지 않습니다 \\ ncake 지갑은 스캔을 위해 호환 가능한 노드로 전환됩니다.",
"confirmations": "확인", "confirmations": "확인",
"confirmed": "확인된 잔액", "confirmed": "확인된 잔액",
"confirmed_tx": "확인", "confirmed_tx": "확인",

View file

@ -143,7 +143,7 @@
"confirm_fee_deduction": "အခကြေးငွေကိုနှုတ်ယူခြင်း", "confirm_fee_deduction": "အခကြေးငွေကိုနှုတ်ယူခြင်း",
"confirm_fee_deduction_content": "output မှအခကြေးငွေကိုယူရန်သဘောတူပါသလား။", "confirm_fee_deduction_content": "output မှအခကြေးငွေကိုယူရန်သဘောတူပါသလား။",
"confirm_sending": "ပေးပို့အတည်ပြုပါ။", "confirm_sending": "ပေးပို့အတည်ပြုပါ။",
"confirm_silent_payments_switch_node": "လောလောဆယ်အသံတိတ်ငွေပေးချေမှုကိုစကင်ဖတ်စစ်ဆေးရန် node များကိုပြောင်းရန်လိုအပ်သည်", "confirm_silent_payments_switch_node": "သင်၏လက်ရှိ node သည်အသံတိတ်ငွေပေးချေမှုကိုမပံ့ပိုးပါဟု \\ t",
"confirmations": "အတည်ပြုချက်များ", "confirmations": "အတည်ပြုချက်များ",
"confirmed": "အတည်ပြုထားသော လက်ကျန်ငွေ", "confirmed": "အတည်ပြုထားသော လက်ကျန်ငွေ",
"confirmed_tx": "အတည်ပြုသည်", "confirmed_tx": "အတည်ပြုသည်",

View file

@ -143,7 +143,7 @@
"confirm_fee_deduction": "Bevestig de aftrek van de kosten", "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_fee_deduction_content": "Stemt u ermee in om de vergoeding af te trekken van de output?",
"confirm_sending": "Bevestig verzending", "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", "confirmations": "Bevestigingen",
"confirmed": "Bevestigd saldo", "confirmed": "Bevestigd saldo",
"confirmed_tx": "Bevestigd", "confirmed_tx": "Bevestigd",

View file

@ -143,7 +143,7 @@
"confirm_fee_deduction": "Potwierdź odliczenie opłaty", "confirm_fee_deduction": "Potwierdź odliczenie opłaty",
"confirm_fee_deduction_content": "Czy zgadzasz się odliczyć opłatę od wyników?", "confirm_fee_deduction_content": "Czy zgadzasz się odliczyć opłatę od wyników?",
"confirm_sending": "Potwierdź wysłanie", "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", "confirmations": "Potwierdzenia",
"confirmed": "Potwierdzone saldo", "confirmed": "Potwierdzone saldo",
"confirmed_tx": "Potwierdzony", "confirmed_tx": "Potwierdzony",

View file

@ -143,7 +143,7 @@
"confirm_fee_deduction": "Confirme dedução da taxa", "confirm_fee_deduction": "Confirme dedução da taxa",
"confirm_fee_deduction_content": "Você concorda em deduzir a taxa da saída?", "confirm_fee_deduction_content": "Você concorda em deduzir a taxa da saída?",
"confirm_sending": "Confirmar o envio", "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", "confirmations": "Confirmações",
"confirmed": "Saldo Confirmado", "confirmed": "Saldo Confirmado",
"confirmed_tx": "Confirmado", "confirmed_tx": "Confirmado",

View file

@ -143,7 +143,7 @@
"confirm_fee_deduction": "Подтвердите вычет платы", "confirm_fee_deduction": "Подтвердите вычет платы",
"confirm_fee_deduction_content": "Согласны ли вы вычесть плату из вывода?", "confirm_fee_deduction_content": "Согласны ли вы вычесть плату из вывода?",
"confirm_sending": "Подтвердить отправку", "confirm_sending": "Подтвердить отправку",
"confirm_silent_payments_switch_node": "В настоящее время требуется переключение узлов для сканирования молчаливых платежей", "confirm_silent_payments_switch_node": "Ваш текущий узел не поддерживает Silent Payments \\ ncake Wallet переключится на совместимый узел, только для сканирования",
"confirmations": "Подтверждения", "confirmations": "Подтверждения",
"confirmed": "Подтвержденный баланс", "confirmed": "Подтвержденный баланс",
"confirmed_tx": "Подтвержденный", "confirmed_tx": "Подтвержденный",

View file

@ -143,7 +143,7 @@
"confirm_fee_deduction": "ยืนยันการหักค่าธรรมเนียม", "confirm_fee_deduction": "ยืนยันการหักค่าธรรมเนียม",
"confirm_fee_deduction_content": "คุณตกลงที่จะหักค่าธรรมเนียมจากผลลัพธ์หรือไม่?", "confirm_fee_deduction_content": "คุณตกลงที่จะหักค่าธรรมเนียมจากผลลัพธ์หรือไม่?",
"confirm_sending": "ยืนยันการส่ง", "confirm_sending": "ยืนยันการส่ง",
"confirm_silent_payments_switch_node": "ขณะนี้จำเป็นต้องเปลี่ยนโหนดเพื่อสแกนการชำระเงินแบบเงียบ", "confirm_silent_payments_switch_node": "โหนดปัจจุบันของคุณไม่รองรับการชำระเงินแบบเงียบ \\ ncake กระเป๋าเงินจะเปลี่ยนเป็นโหนดที่เข้ากันได้เพียงเพื่อการสแกน",
"confirmations": "การยืนยัน", "confirmations": "การยืนยัน",
"confirmed": "ยอดคงเหลือที่ยืนยันแล้ว", "confirmed": "ยอดคงเหลือที่ยืนยันแล้ว",
"confirmed_tx": "ซึ่งยืนยันแล้ว", "confirmed_tx": "ซึ่งยืนยันแล้ว",

View file

@ -143,7 +143,7 @@
"confirm_fee_deduction": "Kumpirmahin ang pagbabawas ng bayad", "confirm_fee_deduction": "Kumpirmahin ang pagbabawas ng bayad",
"confirm_fee_deduction_content": "Sumasang -ayon ka bang bawasan ang bayad mula sa output?", "confirm_fee_deduction_content": "Sumasang -ayon ka bang bawasan ang bayad mula sa output?",
"confirm_sending": "Kumpirmahin ang pagpapadala", "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", "confirmations": "Mga kumpirmasyon",
"confirmed": "Nakumpirma na balanse", "confirmed": "Nakumpirma na balanse",
"confirmed_tx": "Nakumpirma", "confirmed_tx": "Nakumpirma",

View file

@ -143,7 +143,7 @@
"confirm_fee_deduction": "Ücret kesintisini onaylayın", "confirm_fee_deduction": "Ücret kesintisini onaylayın",
"confirm_fee_deduction_content": "Ücreti çıktıdan düşürmeyi kabul ediyor musunuz?", "confirm_fee_deduction_content": "Ücreti çıktıdan düşürmeyi kabul ediyor musunuz?",
"confirm_sending": "Göndermeyi onayla", "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", "confirmations": "Onay",
"confirmed": "Onaylanmış Bakiye", "confirmed": "Onaylanmış Bakiye",
"confirmed_tx": "Onaylanmış", "confirmed_tx": "Onaylanmış",

View file

@ -143,7 +143,7 @@
"confirm_fee_deduction": "Підтвердьте відрахування комісії", "confirm_fee_deduction": "Підтвердьте відрахування комісії",
"confirm_fee_deduction_content": "Чи погоджуєтесь ви вирахувати комісію з сумми одержувача?", "confirm_fee_deduction_content": "Чи погоджуєтесь ви вирахувати комісію з сумми одержувача?",
"confirm_sending": "Підтвердити відправлення", "confirm_sending": "Підтвердити відправлення",
"confirm_silent_payments_switch_node": "В даний час потрібно перемикати вузли на сканування мовчазних платежів", "confirm_silent_payments_switch_node": "Ваш поточний вузол не підтримує мовчазні платежі \\ ncake Wallet перейде на сумісний вузол, лише для сканування",
"confirmations": "Підтвердження", "confirmations": "Підтвердження",
"confirmed": "Підтверджений баланс", "confirmed": "Підтверджений баланс",
"confirmed_tx": "Підтверджений", "confirmed_tx": "Підтверджений",

View file

@ -143,7 +143,7 @@
"confirm_fee_deduction": "فیس میں کٹوتی کی تصدیق کریں", "confirm_fee_deduction": "فیس میں کٹوتی کی تصدیق کریں",
"confirm_fee_deduction_content": "کیا آپ آؤٹ پٹ سے فیس کم کرنے پر راضی ہیں؟", "confirm_fee_deduction_content": "کیا آپ آؤٹ پٹ سے فیس کم کرنے پر راضی ہیں؟",
"confirm_sending": "بھیجنے کی تصدیق کریں۔", "confirm_sending": "بھیجنے کی تصدیق کریں۔",
"confirm_silent_payments_switch_node": "فی الحال خاموش ادائیگیوں کو اسکین کرنے کے لئے نوڈس کو تبدیل کرنے کی ضرورت ہے", "confirm_silent_payments_switch_node": "آپ کا موجودہ نوڈ خاموش ادائیگیوں کی حمایت نہیں کرتا ہے۔",
"confirmations": "تصدیقات", "confirmations": "تصدیقات",
"confirmed": "تصدیق شدہ بیلنس", "confirmed": "تصدیق شدہ بیلنس",
"confirmed_tx": "تصدیق", "confirmed_tx": "تصدیق",

View file

@ -143,7 +143,7 @@
"confirm_fee_deduction": "Jẹrisi iyọkuro owo", "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_fee_deduction_content": "Ṣe o gba lati yọkuro idiyele naa kuro ni iṣejade?",
"confirm_sending": "Jẹ́rìí sí ránṣẹ́", "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í", "confirmations": "Àwọn ẹ̀rí",
"confirmed": "A ti jẹ́rìí ẹ̀", "confirmed": "A ti jẹ́rìí ẹ̀",
"confirmed_tx": "Jẹrisi", "confirmed_tx": "Jẹrisi",

View file

@ -143,7 +143,7 @@
"confirm_fee_deduction": "确认费用扣除", "confirm_fee_deduction": "确认费用扣除",
"confirm_fee_deduction_content": "您是否同意从产出中扣除费用?", "confirm_fee_deduction_content": "您是否同意从产出中扣除费用?",
"confirm_sending": "确认发送", "confirm_sending": "确认发送",
"confirm_silent_payments_switch_node": "目前需要切换节点来扫描无声付款", "confirm_silent_payments_switch_node": "您当前的节点不支持无声付款\\ ncake钱包将切换到兼容节点仅用于扫描",
"confirmations": "确认", "confirmations": "确认",
"confirmed": "确认余额", "confirmed": "确认余额",
"confirmed_tx": "确认的", "confirmed_tx": "确认的",

View file

@ -2,6 +2,8 @@ import 'utils/translation/arb_file_utils.dart';
import 'utils/translation/translation_constants.dart'; import 'utils/translation/translation_constants.dart';
import 'utils/translation/translation_utils.dart'; import 'utils/translation/translation_utils.dart';
/// flutter packages pub run tool/append_translation.dart "hello_world" "Hello World!"
void main(List<String> args) async { void main(List<String> args) async {
if (args.length != 2) { if (args.length != 2) {
throw Exception( throw Exception(