mirror of
https://github.com/cake-tech/cake_wallet.git
synced 2025-01-03 09:29:48 +00:00
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:
parent
7514d851ce
commit
311fff2c44
45 changed files with 280 additions and 271 deletions
|
@ -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"
|
||||||
|
|
|
@ -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;
|
||||||
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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;
|
||||||
|
|
|
@ -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);
|
||||||
|
|
|
@ -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;
|
||||||
|
|
|
@ -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;
|
||||||
|
|
|
@ -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;
|
||||||
|
|
|
@ -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',
|
||||||
|
|
|
@ -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,
|
||||||
|
|
|
@ -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);
|
||||||
|
|
|
@ -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();
|
||||||
|
|
|
@ -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),
|
||||||
)
|
)
|
||||||
],
|
],
|
||||||
)
|
|
||||||
],
|
|
||||||
),
|
),
|
||||||
)));
|
),
|
||||||
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -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> {
|
||||||
)
|
)
|
||||||
]
|
]
|
||||||
],
|
],
|
||||||
|
),
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -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) {
|
||||||
|
|
|
@ -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 {
|
||||||
|
|
|
@ -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;
|
||||||
|
|
|
@ -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}'),
|
||||||
|
|
|
@ -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": "مؤكد",
|
||||||
|
|
|
@ -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": "Потвърдено",
|
||||||
|
|
|
@ -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",
|
||||||
|
|
|
@ -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",
|
||||||
|
|
|
@ -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",
|
||||||
|
|
|
@ -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",
|
||||||
|
|
|
@ -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é",
|
||||||
|
|
|
@ -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",
|
||||||
|
|
|
@ -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": "की पुष्टि",
|
||||||
|
|
|
@ -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",
|
||||||
|
|
|
@ -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",
|
||||||
|
|
|
@ -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",
|
||||||
|
|
|
@ -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": "確認済み",
|
||||||
|
|
|
@ -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": "확인",
|
||||||
|
|
|
@ -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": "အတည်ပြုသည်",
|
||||||
|
|
|
@ -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",
|
||||||
|
|
|
@ -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",
|
||||||
|
|
|
@ -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",
|
||||||
|
|
|
@ -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": "Подтвержденный",
|
||||||
|
|
|
@ -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": "ซึ่งยืนยันแล้ว",
|
||||||
|
|
|
@ -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",
|
||||||
|
|
|
@ -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ış",
|
||||||
|
|
|
@ -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": "Підтверджений",
|
||||||
|
|
|
@ -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": "تصدیق",
|
||||||
|
|
|
@ -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",
|
||||||
|
|
|
@ -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": "确认的",
|
||||||
|
|
|
@ -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(
|
||||||
|
|
Loading…
Reference in a new issue