From e2c6cb6f4b7e2f1ab063c4bd6e741b8cae9151e6 Mon Sep 17 00:00:00 2001 From: M Date: Mon, 26 Oct 2020 11:38:01 +0200 Subject: [PATCH 01/58] Fixed loading of setup pin screen from welcome screen for restore case. Renamed 'Next' to 'Restore' for confirm button on restore wallet screen. Removed 'Bitcoin' from welcome screen. --- lib/generated/i18n.dart | 2 +- lib/router.dart | 4 ++-- lib/src/screens/restore/wallet_restore_page.dart | 5 +---- res/values/strings_en.arb | 2 +- 4 files changed, 5 insertions(+), 8 deletions(-) diff --git a/lib/generated/i18n.dart b/lib/generated/i18n.dart index ef1bd3b73..51738d83a 100644 --- a/lib/generated/i18n.dart +++ b/lib/generated/i18n.dart @@ -97,7 +97,7 @@ class S implements WidgetsLocalizations { String get faq => "FAQ"; String get fetching => "Fetching"; String get filters => "Filter"; - String get first_wallet_text => "Awesome wallet for Monero and Bitcoin"; + String get first_wallet_text => "Awesome wallet for Monero"; String get full_balance => "Full Balance"; String get hidden_balance => "Hidden Balance"; String get id => "ID: "; diff --git a/lib/router.dart b/lib/router.dart index dd3837415..8576dc7e2 100644 --- a/lib/router.dart +++ b/lib/router.dart @@ -137,8 +137,8 @@ Route createRoute(RouteSettings settings) { case Routes.restoreWalletOptionsFromWelcome: return CupertinoPageRoute( builder: (_) => getIt.get( - param1: (BuildContext context, dynamic _) => - Navigator.pushNamed(context, Routes.restoreWallet)), + param1: (PinCodeState context, dynamic _) => + Navigator.pushNamed(context.context, Routes.restoreWallet)), fullscreenDialog: true); case Routes.seed: diff --git a/lib/src/screens/restore/wallet_restore_page.dart b/lib/src/screens/restore/wallet_restore_page.dart index aa9f6e259..4f6bc0d66 100644 --- a/lib/src/screens/restore/wallet_restore_page.dart +++ b/lib/src/screens/restore/wallet_restore_page.dart @@ -47,9 +47,6 @@ class WalletRestorePage extends BasePage { Theme.of(context).primaryTextTheme.title.color), )); - @override - String get title => S.current.restore_title_from_seed; - final WalletRestoreViewModel walletRestoreViewModel; final PageController _controller; final List _pages; @@ -105,7 +102,7 @@ class WalletRestorePage extends BasePage { return LoadingPrimaryButton( onPressed: () => walletRestoreViewModel.create(options: _credentials()), - text: S.of(context).seed_language_next, + text: S.of(context).restore_recover, color: Colors.green, textColor: Colors.white, isLoading: walletRestoreViewModel.state is IsExecutingState); diff --git a/res/values/strings_en.arb b/res/values/strings_en.arb index c9c879acd..55fd76c0c 100644 --- a/res/values/strings_en.arb +++ b/res/values/strings_en.arb @@ -1,7 +1,7 @@ { "welcome" : "Welcome to", "cake_wallet" : "Cake Wallet", - "first_wallet_text" : "Awesome wallet for Monero and Bitcoin", + "first_wallet_text" : "Awesome wallet for Monero", "please_make_selection" : "Please make selection below to create or recover your wallet.", "create_new" : "Create New Wallet", "restore_wallet" : "Restore Wallet", From 44e55f0bc4a19d8699f4caea2d69b4a1ee42172b Mon Sep 17 00:00:00 2001 From: M Date: Mon, 26 Oct 2020 11:58:16 +0200 Subject: [PATCH 02/58] Changed background and text colors of confirm buttons on disclaimer and restore wallet screens. --- .../screens/disclaimer/disclaimer_page.dart | 21 ++++++++++++------- .../screens/restore/wallet_restore_page.dart | 12 +++++++++-- pubspec.lock | 2 +- 3 files changed, 24 insertions(+), 11 deletions(-) diff --git a/lib/src/screens/disclaimer/disclaimer_page.dart b/lib/src/screens/disclaimer/disclaimer_page.dart index d7d2cb599..2142b2bd4 100644 --- a/lib/src/screens/disclaimer/disclaimer_page.dart +++ b/lib/src/screens/disclaimer/disclaimer_page.dart @@ -305,14 +305,19 @@ class DisclaimerBodyState extends State { Container( padding: EdgeInsets.only(left: 24.0, right: 24.0, bottom: 24.0), child: PrimaryButton( - onPressed: _checked - ? () => - Navigator.of(context).popAndPushNamed(Routes.welcome) - : null, - text: 'Accept', - color: Colors.green, - textColor: Colors.white, - ), + onPressed: _checked + ? () => + Navigator.of(context).popAndPushNamed(Routes.welcome) + : null, + text: 'Accept', + color: Theme.of(context) + .accentTextTheme + .subtitle + .decorationColor, + textColor: Theme.of(context) + .accentTextTheme + .headline + .decorationColor), ), ], ], diff --git a/lib/src/screens/restore/wallet_restore_page.dart b/lib/src/screens/restore/wallet_restore_page.dart index 4f6bc0d66..7db7170bd 100644 --- a/lib/src/screens/restore/wallet_restore_page.dart +++ b/lib/src/screens/restore/wallet_restore_page.dart @@ -103,8 +103,16 @@ class WalletRestorePage extends BasePage { onPressed: () => walletRestoreViewModel.create(options: _credentials()), text: S.of(context).restore_recover, - color: Colors.green, - textColor: Colors.white, + color: Theme + .of(context) + .accentTextTheme + .subtitle + .decorationColor, + textColor: Theme + .of(context) + .accentTextTheme + .headline + .decorationColor, isLoading: walletRestoreViewModel.state is IsExecutingState); }, )) diff --git a/pubspec.lock b/pubspec.lock index ee3933bc8..f4bf8a412 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -645,7 +645,7 @@ packages: name: path_provider url: "https://pub.dartlang.org" source: hosted - version: "1.6.21" + version: "1.6.22" path_provider_linux: dependency: transitive description: From 4dce12e2dffae9ce99d405f885cbdfe9037f60a4 Mon Sep 17 00:00:00 2001 From: OleksandrSobol Date: Mon, 26 Oct 2020 19:19:48 +0200 Subject: [PATCH 03/58] CAKE-123 | changed Telegram bot name in the settings page --- lib/view_model/settings/settings_view_model.dart | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/view_model/settings/settings_view_model.dart b/lib/view_model/settings/settings_view_model.dart index d51ba7f0b..6711a222b 100644 --- a/lib/view_model/settings/settings_view_model.dart +++ b/lib/view_model/settings/settings_view_model.dart @@ -120,7 +120,7 @@ abstract class SettingsViewModelBase with Store { LinkListItem( title: 'Telegram', icon: 'assets/images/Telegram.png', - linkTitle: 'Cake_Wallet', + linkTitle: '@cakewallet_bot', link: 'https:t.me/cakewallet_bot'), LinkListItem( title: 'Twitter', From 692c460988c7dadfba2a297cee851f024494e581 Mon Sep 17 00:00:00 2001 From: OleksandrSobol Date: Mon, 26 Oct 2020 19:28:36 +0200 Subject: [PATCH 04/58] CAKE-129 | added new length of the new btc address in the address validator --- lib/core/address_validator.dart | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/core/address_validator.dart b/lib/core/address_validator.dart index e043e3b1e..ccc8b83ab 100644 --- a/lib/core/address_validator.dart +++ b/lib/core/address_validator.dart @@ -60,7 +60,7 @@ class AddressValidator extends TextValidator { case CryptoCurrency.bnb: return [42]; case CryptoCurrency.btc: - return [34, 42]; + return [33, 34, 42]; case CryptoCurrency.dai: return [42]; case CryptoCurrency.dash: From bf491c7d14076724d9201ace919e55bdc35df6c3 Mon Sep 17 00:00:00 2001 From: OleksandrSobol Date: Wed, 28 Oct 2020 19:33:04 +0200 Subject: [PATCH 05/58] CAKE-130 | confirmation button shown only for pairs when user send xmr; if provider is xmr.to then button title is Confirm, else button title is Send XMR --- .../exchange_trade/exchange_trade_page.dart | 24 +++++++++++++++---- 1 file changed, 19 insertions(+), 5 deletions(-) diff --git a/lib/src/screens/exchange_trade/exchange_trade_page.dart b/lib/src/screens/exchange_trade/exchange_trade_page.dart index cfadd48ff..15c1a8a77 100644 --- a/lib/src/screens/exchange_trade/exchange_trade_page.dart +++ b/lib/src/screens/exchange_trade/exchange_trade_page.dart @@ -227,11 +227,7 @@ class ExchangeTradeState extends State { ); }), bottomSectionPadding: EdgeInsets.fromLTRB(24, 0, 24, 24), - bottomSection: PrimaryButton( - onPressed: () {}, - text: S.of(context).confirm, - color: Theme.of(context).accentTextTheme.body2.color, - textColor: Colors.white) + bottomSection: /*Observer( builder: (_) => tradeStore.trade.from == CryptoCurrency.xmr && !(sendStore.state is TransactionCommitted) @@ -250,6 +246,24 @@ class ExchangeTradeState extends State { color: Colors.blue, textColor: Colors.white) : Offstage()),*/ + Observer( + builder: (_) { + final trade = widget.exchangeTradeViewModel.trade; + + return trade.from == CryptoCurrency.xmr + ? LoadingPrimaryButton( + isDisabled: trade.inputAddress == null || + trade.inputAddress.isEmpty, + isLoading: false, // FIXME + onPressed: () {}, // FIXME + text: trade.provider == + ExchangeProviderDescription.xmrto + ? S.of(context).confirm + : S.of(context).send_xmr, + color: Theme.of(context).accentTextTheme.body2.color, + textColor: Colors.white) + : Offstage(); + }) ), ); } From 863a18ea7811501af03b169e24a912c1e30e2df6 Mon Sep 17 00:00:00 2001 From: Oleksandr Sobol Date: Wed, 28 Oct 2020 20:20:07 +0200 Subject: [PATCH 06/58] CAKE-130 | fixed string resources --- lib/generated/i18n.dart | 48 +++++++++++++++++++-------------------- res/values/strings_de.arb | 4 ++-- res/values/strings_en.arb | 4 ++-- res/values/strings_es.arb | 4 ++-- res/values/strings_hi.arb | 4 ++-- res/values/strings_ja.arb | 4 ++-- res/values/strings_ko.arb | 4 ++-- res/values/strings_nl.arb | 4 ++-- res/values/strings_pl.arb | 4 ++-- res/values/strings_pt.arb | 4 ++-- res/values/strings_ru.arb | 4 ++-- res/values/strings_uk.arb | 4 ++-- res/values/strings_zh.arb | 4 ++-- 13 files changed, 48 insertions(+), 48 deletions(-) diff --git a/lib/generated/i18n.dart b/lib/generated/i18n.dart index 51738d83a..17de0647c 100644 --- a/lib/generated/i18n.dart +++ b/lib/generated/i18n.dart @@ -321,8 +321,8 @@ class S implements WidgetsLocalizations { String error_text_limits_loading_failed(String provider) => "Trade for ${provider} is not created. Limits loading failed"; String error_text_maximum_limit(String provider, String max, String currency) => "Trade for ${provider} is not created. Amount is more then maximum: ${max} ${currency}"; String error_text_minimal_limit(String provider, String min, String currency) => "Trade for ${provider} is not created. Amount is less then minimal: ${min} ${currency}"; - String exchange_result_confirm(String fetchingLabel, String from, String walletName) => "By pressing confirm, you will be sending ${fetchingLabel} ${from} from your wallet called ${walletName} to the address shown above. Or you can send from your external wallet to the above address/QR code.\n\nPlease press confirm to continue or go back to change the amounts."; - String exchange_result_description(String fetchingLabel, String from) => "Please send ${fetchingLabel} ${from} to the address shown above."; + String exchange_result_confirm(String fetchingLabel, String from, String walletName) => "By pressing confirm, you will be sending ${fetchingLabel} ${from} from your wallet called ${walletName} to the address shown below. Or you can send from your external wallet to the below address/QR code.\n\nPlease press confirm to continue or go back to change the amounts."; + String exchange_result_description(String fetchingLabel, String from) => "Please send ${fetchingLabel} ${from} to the address shown below."; String failed_authentication(String state_error) => "Failed authentication. ${state_error}"; String max_value(String value, String currency) => "Max: ${value} ${currency}"; String min_value(String value, String currency) => "Min: ${value} ${currency}"; @@ -975,11 +975,11 @@ class $de extends S { @override String Blocks_remaining(String status) => "${status} Verbleibende Blöcke"; @override - String exchange_result_confirm(String fetchingLabel, String from, String walletName) => "Durch Drücken von Bestätigen wird gesendet ${fetchingLabel} ${from} von Ihrer Brieftasche aus angerufen ${walletName} an die oben angegebene Adresse. Oder Sie können von Ihrem externen Portemonnaie an die oben angegebene Adresse / QR-Code senden.\n\nBitte bestätigen Sie, um fortzufahren, oder gehen Sie zurück, um die Beträge zu änderns."; + String exchange_result_confirm(String fetchingLabel, String from, String walletName) => "Durch Drücken von Bestätigen wird gesendet ${fetchingLabel} ${from} von Ihrer Brieftasche aus angerufen ${walletName} an die unten angegebene Adresse. Oder Sie können von Ihrem externen Portemonnaie an die unten angegebene Adresse / QR-Code senden.\n\nBitte bestätigen Sie, um fortzufahren, oder gehen Sie zurück, um die Beträge zu änderns."; @override String error_text_limits_loading_failed(String provider) => "Handel für ${provider} wird nicht erstellt. Das Laden der Limits ist fehlgeschlagen"; @override - String exchange_result_description(String fetchingLabel, String from) => "Bitte senden ${fetchingLabel} ${from} an die oben angegebene Adresse.'"; + String exchange_result_description(String fetchingLabel, String from) => "Bitte senden ${fetchingLabel} ${from} an die unten angegebene Adresse.'"; @override String commit_transaction_amount_fee(String amount, String fee) => "Transaktion festschreiben\nMenge: ${amount}\nGebühr: ${fee}"; @override @@ -1625,11 +1625,11 @@ class $hi extends S { @override String Blocks_remaining(String status) => "${status} शेष रहते हैं"; @override - String exchange_result_confirm(String fetchingLabel, String from, String walletName) => "पुष्टि दबाकर, आप भेज रहे होंगे ${fetchingLabel} ${from} अपने बटुए से ${walletName} ऊपर दिखाए गए पते पर। या आप अपने बाहरी वॉलेट से उपरोक्त पते / क्यूआर कोड पर भेज सकते हैं।\n\nकृपया जारी रखने या राशि बदलने के लिए वापस जाने के लिए पुष्टि करें दबाएं."; + String exchange_result_confirm(String fetchingLabel, String from, String walletName) => "पुष्टि दबाकर, आप भेज रहे होंगे ${fetchingLabel} ${from} अपने बटुए से ${walletName} नीचे दिखाए गए पते पर। या आप अपने बाहरी वॉलेट से नीचे के पते पर भेज सकते हैं / क्यूआर कोड पर भेज सकते हैं।\n\nकृपया जारी रखने या राशि बदलने के लिए वापस जाने के लिए पुष्टि करें दबाएं."; @override String error_text_limits_loading_failed(String provider) => "व्यापार ${provider} के लिए नहीं बनाया गया है। लोडिंग की सीमाएं विफल रहीं"; @override - String exchange_result_description(String fetchingLabel, String from) => "कृपया भेजें ${fetchingLabel} ${from} ऊपर दिखाए गए पते पर"; + String exchange_result_description(String fetchingLabel, String from) => "कृपया भेजें ${fetchingLabel} ${from} नीचे दिखाए गए पते पर"; @override String commit_transaction_amount_fee(String amount, String fee) => "लेन-देन करें\nरकम: ${amount}\nशुल्क: ${fee}"; @override @@ -2275,11 +2275,11 @@ class $ru extends S { @override String Blocks_remaining(String status) => "${status} Осталось блоков"; @override - String exchange_result_confirm(String fetchingLabel, String from, String walletName) => "Нажимая подтвердить, вы отправите ${fetchingLabel} ${from} с вашего кошелька ${walletName} на адрес указанный выше. Или вы можете отправить со своего внешнего кошелька на вышеуказанный адрес/QR-код.\n\nПожалуйста, нажмите подтвердить для продолжения, или вернитесь назад для изменения суммы."; + String exchange_result_confirm(String fetchingLabel, String from, String walletName) => "Нажимая подтвердить, вы отправите ${fetchingLabel} ${from} с вашего кошелька ${walletName} на адрес указанный ниже. Или вы можете отправить со своего внешнего кошелька на нижеуказанный адрес/QR-код.\n\nПожалуйста, нажмите подтвердить для продолжения, или вернитесь назад для изменения суммы."; @override String error_text_limits_loading_failed(String provider) => "Сделка для ${provider} не создана. Ошибка загрузки лимитов"; @override - String exchange_result_description(String fetchingLabel, String from) => "Пожалуйста отправьте ${fetchingLabel} ${from} на адрес, указанный выше."; + String exchange_result_description(String fetchingLabel, String from) => "Пожалуйста отправьте ${fetchingLabel} ${from} на адрес, указанный ниже."; @override String commit_transaction_amount_fee(String amount, String fee) => "Подтвердить транзакцию \nСумма: ${amount}\nКомиссия: ${fee}"; @override @@ -2925,11 +2925,11 @@ class $ko extends S { @override String Blocks_remaining(String status) => "${status} 남은 블록"; @override - String exchange_result_confirm(String fetchingLabel, String from, String walletName) => "확인을 누르면 전송됩니다 ${fetchingLabel} ${from} 지갑에서 ${walletName} 위에 표시된 주소로. 또는 외부 지갑에서 위의 주소 / QR 코드로 보낼 수 있습니다.\n\n확인을 눌러 계속하거나 금액을 변경하려면 돌아가십시오."; + String exchange_result_confirm(String fetchingLabel, String from, String walletName) => "확인을 누르면 전송됩니다 ${fetchingLabel} ${from} 지갑에서 ${walletName} 아래 주소로. 또는 외부 지갑에서 아래 주소로 보낼 수 있습니다 / QR 코드로 보낼 수 있습니다.\n\n확인을 눌러 계속하거나 금액을 변경하려면 돌아가십시오."; @override String error_text_limits_loading_failed(String provider) => "거래 ${provider} 가 생성되지 않습니다. 로딩 실패"; @override - String exchange_result_description(String fetchingLabel, String from) => "보내주세요 ${fetchingLabel} ${from} 위에 표시된 주소로."; + String exchange_result_description(String fetchingLabel, String from) => "보내주세요 ${fetchingLabel} ${from} 아래 주소로."; @override String commit_transaction_amount_fee(String amount, String fee) => "커밋 거래\n양: ${amount}\n보수: ${fee}"; @override @@ -3575,11 +3575,11 @@ class $pt extends S { @override String Blocks_remaining(String status) => "${status} blocos restantes"; @override - String exchange_result_confirm(String fetchingLabel, String from, String walletName) => "Ao confirmar, você enviará ${fetchingLabel} ${from} da sua carteira ${walletName} para o endereço exibido acima. Você também pode enviar com uma carteira externa para o endereço/código QR acima.\n\nPressione Confirmar para continuar ou volte para alterar os valores."; + String exchange_result_confirm(String fetchingLabel, String from, String walletName) => "Ao confirmar, você enviará ${fetchingLabel} ${from} da sua carteira ${walletName} para o endereço mostrado abaixo. Ou você pode enviar de sua carteira externa para o endereço abaixo/código QR acima.\n\nPressione Confirmar para continuar ou volte para alterar os valores."; @override String error_text_limits_loading_failed(String provider) => "A troca por ${provider} não é criada. Falha no carregamento dos limites"; @override - String exchange_result_description(String fetchingLabel, String from) => "Por favor, envie ${fetchingLabel} ${from} para o endereço mostrado acima."; + String exchange_result_description(String fetchingLabel, String from) => "Por favor, envie ${fetchingLabel} ${from} para o endereço mostrado abaixo."; @override String commit_transaction_amount_fee(String amount, String fee) => "Confirmar transação\nQuantia: ${amount}\nTaxa: ${fee}"; @override @@ -4225,11 +4225,11 @@ class $uk extends S { @override String Blocks_remaining(String status) => "${status} Залишилось блоків"; @override - String exchange_result_confirm(String fetchingLabel, String from, String walletName) => "Натиснувши підтвердити, ви відправите ${fetchingLabel} ${from} з вашого гаманця ${walletName} на адресу вказану вище. Або ви можете відправити зі свого зовнішнього гаманця на вищевказану адресу/QR-код.\n\nБудь ласка, натисніть підтвердити для продовження або поверніться назад щоб змінити суму."; + String exchange_result_confirm(String fetchingLabel, String from, String walletName) => "Натиснувши підтвердити, ви відправите ${fetchingLabel} ${from} з вашого гаманця ${walletName} на адресу вказану нижче. Або ви можете відправити зі свого зовнішнього гаманця на нижчевказану адресу/QR-код.\n\nБудь ласка, натисніть підтвердити для продовження або поверніться назад щоб змінити суму."; @override String error_text_limits_loading_failed(String provider) => "Операція для ${provider} не створена. Помилка завантаження лімітів"; @override - String exchange_result_description(String fetchingLabel, String from) => "Будь ласка, відправте ${fetchingLabel} ${from} на адресу, вказану вище."; + String exchange_result_description(String fetchingLabel, String from) => "Будь ласка, відправте ${fetchingLabel} ${from} на адресу, вказану нижче."; @override String commit_transaction_amount_fee(String amount, String fee) => "Підтвердити транзакцію \nСума: ${amount}\nКомісія: ${fee}"; @override @@ -4875,11 +4875,11 @@ class $ja extends S { @override String Blocks_remaining(String status) => "${status} 残りのブロック"; @override - String exchange_result_confirm(String fetchingLabel, String from, String walletName) => "確認を押すと、送信されます ${fetchingLabel} ${from} と呼ばれるあなたの財布から ${walletName} 上記のアドレスへ. または、外部ウォレットから上記のアドレス/ QRコードに送信できます.\n\n確認を押して続行するか、戻って金額を変更してください."; + String exchange_result_confirm(String fetchingLabel, String from, String walletName) => "確認を押すと、送信されます ${fetchingLabel} ${from} と呼ばれるあなたの財布から ${walletName} 下記の住所へ。 または、外部ウォレットから以下のアドレスに送信することもできます/ QRコードに送信できます.\n\n確認を押して続行するか、戻って金額を変更してください."; @override String error_text_limits_loading_failed(String provider) => "${provider} の取引は作成されません。 制限の読み込みに失敗しました"; @override - String exchange_result_description(String fetchingLabel, String from) => "送信してください ${fetchingLabel} ${from} 上記のアドレスへ."; + String exchange_result_description(String fetchingLabel, String from) => "送信してください ${fetchingLabel} ${from} 下記の住所へ."; @override String commit_transaction_amount_fee(String amount, String fee) => "トランザクションをコミット\n量: ${amount}\n費用: ${fee}"; @override @@ -5529,11 +5529,11 @@ class $pl extends S { @override String Blocks_remaining(String status) => "${status} Bloki pozostałe"; @override - String exchange_result_confirm(String fetchingLabel, String from, String walletName) => "Naciskając Potwierdź, wyślesz ${fetchingLabel} ${from} z twojego portfela ${walletName} z twojego portfela. Lub możesz wysłać z zewnętrznego portfela na powyższy adres / kod QR.\n\nNaciśnij Potwierdź, aby kontynuować lub wróć, aby zmienić kwoty."; + String exchange_result_confirm(String fetchingLabel, String from, String walletName) => "Naciskając Potwierdź, wyślesz ${fetchingLabel} ${from} z twojego portfela ${walletName} na adres podany poniżej. Lub możesz wysłać z zewnętrznego portfela na poniższy adres / kod QR.\n\nNaciśnij Potwierdź, aby kontynuować lub wróć, aby zmienić kwoty."; @override String error_text_limits_loading_failed(String provider) => "Wymiana dla ${provider} nie została utworzona. Ładowanie limitów nie powiodło się"; @override - String exchange_result_description(String fetchingLabel, String from) => "Proszę wyślij ${fetchingLabel} ${from} na adres podany powyżej."; + String exchange_result_description(String fetchingLabel, String from) => "Proszę wyślij ${fetchingLabel} ${from} na adres podany poniżej."; @override String commit_transaction_amount_fee(String amount, String fee) => "Zatwierdź transakcję\nIlość: ${amount}\nOpłata: ${fee}"; @override @@ -6179,11 +6179,11 @@ class $es extends S { @override String Blocks_remaining(String status) => "${status} Bloques restantes"; @override - String exchange_result_confirm(String fetchingLabel, String from, String walletName) => "Al presionar confirmar, enviará ${fetchingLabel} ${from} desde su billetera llamada ${walletName} a la dirección que se muestra arriba. O puede enviar desde su billetera externa a la dirección / código QR anterior.\n\nPresione confirmar para continuar o regrese para cambiar los montos."; + String exchange_result_confirm(String fetchingLabel, String from, String walletName) => "Al presionar confirmar, enviará ${fetchingLabel} ${from} desde su billetera llamada ${walletName} a la dirección que se muestra a continuación. O puede enviar desde su billetera externa a la siguiente dirección / código QR anterior.\n\nPresione confirmar para continuar o regrese para cambiar los montos."; @override String error_text_limits_loading_failed(String provider) => "El comercio por ${provider} no se crea. Límites de carga fallidos"; @override - String exchange_result_description(String fetchingLabel, String from) => "Envíe ${fetchingLabel} ${from} a la dirección que se muestra arriba."; + String exchange_result_description(String fetchingLabel, String from) => "Envíe ${fetchingLabel} ${from} a la dirección que se muestra a continuación."; @override String commit_transaction_amount_fee(String amount, String fee) => "Confirmar transacción\nCantidad: ${amount}\nCuota: ${fee}"; @override @@ -6829,11 +6829,11 @@ class $nl extends S { @override String Blocks_remaining(String status) => "${status} Resterende blokken"; @override - String exchange_result_confirm(String fetchingLabel, String from, String walletName) => "Door op bevestigen te drukken, wordt u verzonden ${fetchingLabel} ${from} uit je portemonnee genoemd ${walletName} naar bovenstaand adres. Of u kunt uw externe portemonnee naar bovenstaand adres / QR-code sturen.\n\nDruk op bevestigen om door te gaan of terug te gaan om de bedragen te wijzigen."; + String exchange_result_confirm(String fetchingLabel, String from, String walletName) => "Door op bevestigen te drukken, wordt u verzonden ${fetchingLabel} ${from} uit je portemonnee genoemd ${walletName} naar het onderstaande adres. Of u kunt vanuit uw externe portemonnee naar het onderstaande adres verzenden / QR-code sturen.\n\nDruk op bevestigen om door te gaan of terug te gaan om de bedragen te wijzigen."; @override String error_text_limits_loading_failed(String provider) => "Ruil voor ${provider} is niet gemaakt. Beperkingen laden mislukt"; @override - String exchange_result_description(String fetchingLabel, String from) => "Zend alstublieft ${fetchingLabel} ${from} naar bovenstaand adres."; + String exchange_result_description(String fetchingLabel, String from) => "Zend alstublieft ${fetchingLabel} ${from} naar het onderstaande adres."; @override String commit_transaction_amount_fee(String amount, String fee) => "Verricht transactie\nBedrag: ${amount}\nhonorarium: ${fee}"; @override @@ -7479,11 +7479,11 @@ class $zh extends S { @override String Blocks_remaining(String status) => "${status} 剩余的块"; @override - String exchange_result_confirm(String fetchingLabel, String from, String walletName) => "点击确认 您将发送 ${fetchingLabel} ${from} 从你的钱包里 ${walletName} 到上面显示的地址. 或者,您也可以从外部钱包发送上述地址/ QR码。\n\n请按确认继续或返回以更改金额"; + String exchange_result_confirm(String fetchingLabel, String from, String walletName) => "点击确认 您将发送 ${fetchingLabel} ${from} 从你的钱包里 ${walletName} 到下面顯示的地址。 或者您可以從外部錢包發送到以下地址/ QR码。\n\n请按确认继续或返回以更改金额"; @override String error_text_limits_loading_failed(String provider) => "未創建 ${provider} 交易。 限制加載失敗"; @override - String exchange_result_description(String fetchingLabel, String from) => "请发送 ${fetchingLabel} ${from} 到上面显示的地址."; + String exchange_result_description(String fetchingLabel, String from) => "请发送 ${fetchingLabel} ${from} 到下面顯示的地址."; @override String commit_transaction_amount_fee(String amount, String fee) => "提交交易\n量: ${amount}\nFee: ${fee}"; @override diff --git a/res/values/strings_de.arb b/res/values/strings_de.arb index 5ebe83e70..9a6b6d057 100644 --- a/res/values/strings_de.arb +++ b/res/values/strings_de.arb @@ -88,8 +88,8 @@ "offer_expires_in" : "Angebot läuft ab in: ", "trade_is_powered_by" : "Dieser Handel wird betrieben von ${provider}", "copy_address" : "Adresse kopieren", - "exchange_result_confirm" : "Durch Drücken von Bestätigen wird gesendet ${fetchingLabel} ${from} von Ihrer Brieftasche aus angerufen ${walletName} an die oben angegebene Adresse. Oder Sie können von Ihrem externen Portemonnaie an die oben angegebene Adresse / QR-Code senden.\n\nBitte bestätigen Sie, um fortzufahren, oder gehen Sie zurück, um die Beträge zu änderns.", - "exchange_result_description" : "Bitte senden ${fetchingLabel} ${from} an die oben angegebene Adresse.'", + "exchange_result_confirm" : "Durch Drücken von Bestätigen wird gesendet ${fetchingLabel} ${from} von Ihrer Brieftasche aus angerufen ${walletName} an die unten angegebene Adresse. Oder Sie können von Ihrem externen Portemonnaie an die unten angegebene Adresse / QR-Code senden.\n\nBitte bestätigen Sie, um fortzufahren, oder gehen Sie zurück, um die Beträge zu änderns.", + "exchange_result_description" : "Bitte senden ${fetchingLabel} ${from} an die unten angegebene Adresse.'", "exchange_result_write_down_ID" : "*Bitte kopieren oder notieren Sie Ihren oben gezeigten Ausweis.", "confirm" : "Bestätigen", "confirm_sending" : "Bestätigen Sie das Senden", diff --git a/res/values/strings_en.arb b/res/values/strings_en.arb index 55fd76c0c..0d95645e4 100644 --- a/res/values/strings_en.arb +++ b/res/values/strings_en.arb @@ -88,8 +88,8 @@ "offer_expires_in" : "Offer expires in: ", "trade_is_powered_by" : "This trade is powered by ${provider}", "copy_address" : "Copy Address", - "exchange_result_confirm" : "By pressing confirm, you will be sending ${fetchingLabel} ${from} from your wallet called ${walletName} to the address shown above. Or you can send from your external wallet to the above address/QR code.\n\nPlease press confirm to continue or go back to change the amounts.", - "exchange_result_description" : "Please send ${fetchingLabel} ${from} to the address shown above.", + "exchange_result_confirm" : "By pressing confirm, you will be sending ${fetchingLabel} ${from} from your wallet called ${walletName} to the address shown below. Or you can send from your external wallet to the below address/QR code.\n\nPlease press confirm to continue or go back to change the amounts.", + "exchange_result_description" : "Please send ${fetchingLabel} ${from} to the address shown below.", "exchange_result_write_down_ID" : "*Please copy or write down your ID shown above.", "confirm" : "Confirm", "confirm_sending" : "Confirm sending", diff --git a/res/values/strings_es.arb b/res/values/strings_es.arb index 677960966..8e9230f7b 100644 --- a/res/values/strings_es.arb +++ b/res/values/strings_es.arb @@ -88,8 +88,8 @@ "offer_expires_in" : "Oferta expira en: ", "trade_is_powered_by" : "Este comercio es impulsado por ${provider}", "copy_address" : "Copiar dirección ", - "exchange_result_confirm" : "Al presionar confirmar, enviará ${fetchingLabel} ${from} desde su billetera llamada ${walletName} a la dirección que se muestra arriba. O puede enviar desde su billetera externa a la dirección / código QR anterior.\n\nPresione confirmar para continuar o regrese para cambiar los montos.", - "exchange_result_description" : "Envíe ${fetchingLabel} ${from} a la dirección que se muestra arriba.", + "exchange_result_confirm" : "Al presionar confirmar, enviará ${fetchingLabel} ${from} desde su billetera llamada ${walletName} a la dirección que se muestra a continuación. O puede enviar desde su billetera externa a la siguiente dirección / código QR anterior.\n\nPresione confirmar para continuar o regrese para cambiar los montos.", + "exchange_result_description" : "Envíe ${fetchingLabel} ${from} a la dirección que se muestra a continuación.", "exchange_result_write_down_ID" : "*Copie o escriba su identificación que se muestra arriba.", "confirm" : "Confirmar", "confirm_sending" : "Confirmar envío", diff --git a/res/values/strings_hi.arb b/res/values/strings_hi.arb index d1dbedca3..2f4e8767e 100644 --- a/res/values/strings_hi.arb +++ b/res/values/strings_hi.arb @@ -88,8 +88,8 @@ "offer_expires_in" : "में ऑफर समाप्त हो रहा है: ", "trade_is_powered_by" : "यह व्यापार द्वारा संचालित है ${provider}", "copy_address" : "पता कॉपी करें", - "exchange_result_confirm" : "पुष्टि दबाकर, आप भेज रहे होंगे ${fetchingLabel} ${from} अपने बटुए से ${walletName} ऊपर दिखाए गए पते पर। या आप अपने बाहरी वॉलेट से उपरोक्त पते / क्यूआर कोड पर भेज सकते हैं।\n\nकृपया जारी रखने या राशि बदलने के लिए वापस जाने के लिए पुष्टि करें दबाएं.", - "exchange_result_description" : "कृपया भेजें ${fetchingLabel} ${from} ऊपर दिखाए गए पते पर", + "exchange_result_confirm" : "पुष्टि दबाकर, आप भेज रहे होंगे ${fetchingLabel} ${from} अपने बटुए से ${walletName} नीचे दिखाए गए पते पर। या आप अपने बाहरी वॉलेट से नीचे के पते पर भेज सकते हैं / क्यूआर कोड पर भेज सकते हैं।\n\nकृपया जारी रखने या राशि बदलने के लिए वापस जाने के लिए पुष्टि करें दबाएं.", + "exchange_result_description" : "कृपया भेजें ${fetchingLabel} ${from} नीचे दिखाए गए पते पर", "exchange_result_write_down_ID" : "*कृपया ऊपर दिखाए गए अपने ID को कॉपी या लिख लें.", "confirm" : "की पुष्टि करें", "confirm_sending" : "भेजने की पुष्टि करें", diff --git a/res/values/strings_ja.arb b/res/values/strings_ja.arb index 122bb105d..7c593118a 100644 --- a/res/values/strings_ja.arb +++ b/res/values/strings_ja.arb @@ -88,8 +88,8 @@ "offer_expires_in" : "で有効期限が切れます: ", "trade_is_powered_by" : "この取引は ${provider}", "copy_address" : "住所をコピー", - "exchange_result_confirm" : "確認を押すと、送信されます ${fetchingLabel} ${from} と呼ばれるあなたの財布から ${walletName} 上記のアドレスへ. または、外部ウォレットから上記のアドレス/ QRコードに送信できます.\n\n確認を押して続行するか、戻って金額を変更してください.", - "exchange_result_description" : "送信してください ${fetchingLabel} ${from} 上記のアドレスへ.", + "exchange_result_confirm" : "確認を押すと、送信されます ${fetchingLabel} ${from} と呼ばれるあなたの財布から ${walletName} 下記の住所へ。 または、外部ウォレットから以下のアドレスに送信することもできます/ QRコードに送信できます.\n\n確認を押して続行するか、戻って金額を変更してください.", + "exchange_result_description" : "送信してください ${fetchingLabel} ${from} 下記の住所へ.", "exchange_result_write_down_ID" : "*上記のIDをコピーまたは書き留めてください.", "confirm" : "確認する", "confirm_sending" : "送信を確認", diff --git a/res/values/strings_ko.arb b/res/values/strings_ko.arb index 280698bc1..4ec21ccde 100644 --- a/res/values/strings_ko.arb +++ b/res/values/strings_ko.arb @@ -88,8 +88,8 @@ "offer_expires_in" : "쿠폰 만료일: ", "trade_is_powered_by" : "이 거래는 ${provider}", "copy_address" : "주소 복사", - "exchange_result_confirm" : "확인을 누르면 전송됩니다 ${fetchingLabel} ${from} 지갑에서 ${walletName} 위에 표시된 주소로. 또는 외부 지갑에서 위의 주소 / QR 코드로 보낼 수 있습니다.\n\n확인을 눌러 계속하거나 금액을 변경하려면 돌아가십시오.", - "exchange_result_description" : "보내주세요 ${fetchingLabel} ${from} 위에 표시된 주소로.", + "exchange_result_confirm" : "확인을 누르면 전송됩니다 ${fetchingLabel} ${from} 지갑에서 ${walletName} 아래 주소로. 또는 외부 지갑에서 아래 주소로 보낼 수 있습니다 / QR 코드로 보낼 수 있습니다.\n\n확인을 눌러 계속하거나 금액을 변경하려면 돌아가십시오.", + "exchange_result_description" : "보내주세요 ${fetchingLabel} ${from} 아래 주소로.", "exchange_result_write_down_ID" : "*위에 표시된 ID를 복사하거나 적어 두십시오.", "confirm" : "확인", "confirm_sending" : "전송 확인", diff --git a/res/values/strings_nl.arb b/res/values/strings_nl.arb index 08ccb9560..42b376438 100644 --- a/res/values/strings_nl.arb +++ b/res/values/strings_nl.arb @@ -88,8 +88,8 @@ "offer_expires_in" : "Aanbieding verloopt over: ", "trade_is_powered_by" : "Deze transactie wordt mogelijk gemaakt door ${provider}", "copy_address" : "Adres kopiëren", - "exchange_result_confirm" : "Door op bevestigen te drukken, wordt u verzonden ${fetchingLabel} ${from} uit je portemonnee genoemd ${walletName} naar bovenstaand adres. Of u kunt uw externe portemonnee naar bovenstaand adres / QR-code sturen.\n\nDruk op bevestigen om door te gaan of terug te gaan om de bedragen te wijzigen.", - "exchange_result_description" : "Zend alstublieft ${fetchingLabel} ${from} naar bovenstaand adres.", + "exchange_result_confirm" : "Door op bevestigen te drukken, wordt u verzonden ${fetchingLabel} ${from} uit je portemonnee genoemd ${walletName} naar het onderstaande adres. Of u kunt vanuit uw externe portemonnee naar het onderstaande adres verzenden / QR-code sturen.\n\nDruk op bevestigen om door te gaan of terug te gaan om de bedragen te wijzigen.", + "exchange_result_description" : "Zend alstublieft ${fetchingLabel} ${from} naar het onderstaande adres.", "exchange_result_write_down_ID" : "*Kopieer of noteer uw hierboven getoonde ID.", "confirm" : "Bevestigen", "confirm_sending" : "Bevestig verzending", diff --git a/res/values/strings_pl.arb b/res/values/strings_pl.arb index 9ac61f9b3..679a22afa 100644 --- a/res/values/strings_pl.arb +++ b/res/values/strings_pl.arb @@ -88,8 +88,8 @@ "offer_expires_in" : "Oferta wygasa za ", "trade_is_powered_by" : "Ten handel jest zasilany przez ${provider}", "copy_address" : "Skopiuj adress", - "exchange_result_confirm" : "Naciskając Potwierdź, wyślesz ${fetchingLabel} ${from} z twojego portfela ${walletName} z twojego portfela. Lub możesz wysłać z zewnętrznego portfela na powyższy adres / kod QR.\n\nNaciśnij Potwierdź, aby kontynuować lub wróć, aby zmienić kwoty.", - "exchange_result_description" : "Proszę wyślij ${fetchingLabel} ${from} na adres podany powyżej.", + "exchange_result_confirm" : "Naciskając Potwierdź, wyślesz ${fetchingLabel} ${from} z twojego portfela ${walletName} na adres podany poniżej. Lub możesz wysłać z zewnętrznego portfela na poniższy adres / kod QR.\n\nNaciśnij Potwierdź, aby kontynuować lub wróć, aby zmienić kwoty.", + "exchange_result_description" : "Proszę wyślij ${fetchingLabel} ${from} na adres podany poniżej.", "exchange_result_write_down_ID" : "*Skopiuj lub zanotuj swój identyfikator pokazany powyżej.", "confirm" : "Potwierdzać", "confirm_sending" : "Potwierdź wysłanie", diff --git a/res/values/strings_pt.arb b/res/values/strings_pt.arb index 5e9734b8a..9c639c127 100644 --- a/res/values/strings_pt.arb +++ b/res/values/strings_pt.arb @@ -88,8 +88,8 @@ "offer_expires_in" : "A oferta expira em: ", "trade_is_powered_by" : "Troca realizada por ${provider}", "copy_address" : "Copiar endereço", - "exchange_result_confirm" : "Ao confirmar, você enviará ${fetchingLabel} ${from} da sua carteira ${walletName} para o endereço exibido acima. Você também pode enviar com uma carteira externa para o endereço/código QR acima.\n\nPressione Confirmar para continuar ou volte para alterar os valores.", - "exchange_result_description" : "Por favor, envie ${fetchingLabel} ${from} para o endereço mostrado acima.", + "exchange_result_confirm" : "Ao confirmar, você enviará ${fetchingLabel} ${from} da sua carteira ${walletName} para o endereço mostrado abaixo. Ou você pode enviar de sua carteira externa para o endereço abaixo/código QR acima.\n\nPressione Confirmar para continuar ou volte para alterar os valores.", + "exchange_result_description" : "Por favor, envie ${fetchingLabel} ${from} para o endereço mostrado abaixo.", "exchange_result_write_down_ID" : "*Copie ou anote seu ID mostrado acima.", "confirm" : "Confirmar", "confirm_sending" : "Confirmar o envio", diff --git a/res/values/strings_ru.arb b/res/values/strings_ru.arb index d19160f84..f2d7cec90 100644 --- a/res/values/strings_ru.arb +++ b/res/values/strings_ru.arb @@ -88,8 +88,8 @@ "offer_expires_in" : "Предложение истекает через: ", "trade_is_powered_by" : "Сделка выполнена через ${provider}", "copy_address" : "Cкопировать адрес", - "exchange_result_confirm" : "Нажимая подтвердить, вы отправите ${fetchingLabel} ${from} с вашего кошелька ${walletName} на адрес указанный выше. Или вы можете отправить со своего внешнего кошелька на вышеуказанный адрес/QR-код.\n\nПожалуйста, нажмите подтвердить для продолжения, или вернитесь назад для изменения суммы.", - "exchange_result_description" : "Пожалуйста отправьте ${fetchingLabel} ${from} на адрес, указанный выше.", + "exchange_result_confirm" : "Нажимая подтвердить, вы отправите ${fetchingLabel} ${from} с вашего кошелька ${walletName} на адрес указанный ниже. Или вы можете отправить со своего внешнего кошелька на нижеуказанный адрес/QR-код.\n\nПожалуйста, нажмите подтвердить для продолжения, или вернитесь назад для изменения суммы.", + "exchange_result_description" : "Пожалуйста отправьте ${fetchingLabel} ${from} на адрес, указанный ниже.", "exchange_result_write_down_ID" : "*Пожалуйста, скопируйте или запишите ID, указанный выше.", "confirm" : "Подтвердить", "confirm_sending" : "Подтвердить отправку", diff --git a/res/values/strings_uk.arb b/res/values/strings_uk.arb index ad63423ca..da1f88b84 100644 --- a/res/values/strings_uk.arb +++ b/res/values/strings_uk.arb @@ -88,8 +88,8 @@ "offer_expires_in" : "Пропозиція закінчиться через: ", "trade_is_powered_by" : "Операція виконана через ${provider}", "copy_address" : "Cкопіювати адресу", - "exchange_result_confirm" : "Натиснувши підтвердити, ви відправите ${fetchingLabel} ${from} з вашого гаманця ${walletName} на адресу вказану вище. Або ви можете відправити зі свого зовнішнього гаманця на вищевказану адресу/QR-код.\n\nБудь ласка, натисніть підтвердити для продовження або поверніться назад щоб змінити суму.", - "exchange_result_description" : "Будь ласка, відправте ${fetchingLabel} ${from} на адресу, вказану вище.", + "exchange_result_confirm" : "Натиснувши підтвердити, ви відправите ${fetchingLabel} ${from} з вашого гаманця ${walletName} на адресу вказану нижче. Або ви можете відправити зі свого зовнішнього гаманця на нижчевказану адресу/QR-код.\n\nБудь ласка, натисніть підтвердити для продовження або поверніться назад щоб змінити суму.", + "exchange_result_description" : "Будь ласка, відправте ${fetchingLabel} ${from} на адресу, вказану нижче.", "exchange_result_write_down_ID" : "*Будь ласка, скопіюйте або запишіть ID, вказаний вище.", "confirm" : "Підтвердити", "confirm_sending" : "Підтвердити відправлення", diff --git a/res/values/strings_zh.arb b/res/values/strings_zh.arb index 9ebc31daf..f88a1ad23 100644 --- a/res/values/strings_zh.arb +++ b/res/values/strings_zh.arb @@ -88,8 +88,8 @@ "offer_expires_in" : "优惠有效期至 ", "trade_is_powered_by" : "该交易由 ${provider}", "copy_address" : "复制地址", - "exchange_result_confirm" : "点击确认 您将发送 ${fetchingLabel} ${from} 从你的钱包里 ${walletName} 到上面显示的地址. 或者,您也可以从外部钱包发送上述地址/ QR码。\n\n请按确认继续或返回以更改金额", - "exchange_result_description" : "请发送 ${fetchingLabel} ${from} 到上面显示的地址.", + "exchange_result_confirm" : "点击确认 您将发送 ${fetchingLabel} ${from} 从你的钱包里 ${walletName} 到下面顯示的地址。 或者您可以從外部錢包發送到以下地址/ QR码。\n\n请按确认继续或返回以更改金额", + "exchange_result_description" : "请发送 ${fetchingLabel} ${from} 到下面顯示的地址.", "exchange_result_write_down_ID" : "*请复制或写下您上面显示的ID.", "confirm" : "确认", "confirm_sending" : "确认发送", From b8e435ea8e9a214804e18e7c436abab7fa948d67 Mon Sep 17 00:00:00 2001 From: M Date: Thu, 29 Oct 2020 12:49:07 +0200 Subject: [PATCH 07/58] Fixes. --- cw_monero/ios/Classes/monero_api.cpp | 28 ++++--- cw_monero/lib/account_list.dart | 15 +++- cw_monero/lib/subaddress_list.dart | 17 +++- cw_monero/lib/wallet.dart | 29 +++++-- ios/Flutter/AppFrameworkInfo.plist | 40 +++++----- ios/Runner.xcodeproj/project.pbxproj | 9 ++- lib/monero/get_height_by_date.dart | 18 ++++- lib/monero/monero_wallet.dart | 46 +++++++++-- lib/monero/monero_wallet_service.dart | 39 ++++++++-- lib/src/widgets/annotated_editable_text.dart | 77 +++++++++---------- lib/src/widgets/seed_widget.dart | 26 ++++--- lib/view_model/wallet_creation_vm.dart | 2 +- lib/view_model/wallet_restore_view_model.dart | 3 +- pubspec.lock | 20 ++--- 14 files changed, 250 insertions(+), 119 deletions(-) diff --git a/cw_monero/ios/Classes/monero_api.cpp b/cw_monero/ios/Classes/monero_api.cpp index aa96d7656..bc653da10 100644 --- a/cw_monero/ios/Classes/monero_api.cpp +++ b/cw_monero/ios/Classes/monero_api.cpp @@ -87,7 +87,7 @@ extern "C" void updated() { - m_need_to_refresh = true; + m_new_transaction = true; } void refreshed() @@ -472,7 +472,9 @@ extern "C" return false; } - m_listener->m_new_transaction = true; + if (m_listener != nullptr) { + m_listener->m_new_transaction = true; + } pendingTransaction = PendingTransactionRaw(transaction); return true; @@ -485,7 +487,7 @@ extern "C" if (!committed) { error = Utf8Box(strdup(transaction->transaction->errorString().c_str())); - } else { + } else if (m_listener != nullptr) { m_listener->m_new_transaction = true; } @@ -508,9 +510,13 @@ extern "C" } uint64_t height = m_listener->height(); - uint64_t node_height = get_node_height_or_update(height); +// uint64_t node_height = get_node_height_or_update(height); +// +// if (height <= 1 || node_height <= 0) { +// return 0; +// } - if (height <= 1 || node_height <= 0) { + if (height <= 1) { return 0; } @@ -529,10 +535,14 @@ extern "C" } bool should_refresh = m_listener->isNeedToRefresh(); - uint64_t node_height = get_node_height_or_update(m_last_known_wallet_height); +// uint64_t node_height = get_node_height_or_update(m_last_known_wallet_height); +// +// if (should_refresh || (node_height - m_last_known_wallet_height < MONERO_BLOCK_SIZE)) +// { +// m_listener->resetNeedToRefresh(); +// } - if (should_refresh || (node_height - m_last_known_wallet_height < MONERO_BLOCK_SIZE)) - { + if (should_refresh) { m_listener->resetNeedToRefresh(); } @@ -561,7 +571,7 @@ extern "C" if (m_listener != nullptr) { - // free(m_listener); + free(m_listener); } m_listener = new MoneroWalletListener(); diff --git a/cw_monero/lib/account_list.dart b/cw_monero/lib/account_list.dart index bf5618a1b..6e84f5931 100644 --- a/cw_monero/lib/account_list.dart +++ b/cw_monero/lib/account_list.dart @@ -26,7 +26,18 @@ final accountSetLabelNative = moneroApi .lookup>('account_set_label_row') .asFunction(); -void refreshAccounts() => accountRefreshNative(); +bool isUpdating = false; + +void refreshAccounts() { + try { + isUpdating = true; + accountRefreshNative(); + isUpdating = false; + } catch (e) { + isUpdating = false; + rethrow; + } +} List getAllAccount() { final size = accountSizeNative(); @@ -63,4 +74,4 @@ Future addAccount({String label}) async => compute(_addAccount, label); Future setLabelForAccount({int accountIndex, String label}) async => compute( - _setLabelForAccount, {'accountIndex': accountIndex, 'label': label}); + _setLabelForAccount, {'accountIndex': accountIndex, 'label': label}); \ No newline at end of file diff --git a/cw_monero/lib/subaddress_list.dart b/cw_monero/lib/subaddress_list.dart index 933899e0c..97a307040 100644 --- a/cw_monero/lib/subaddress_list.dart +++ b/cw_monero/lib/subaddress_list.dart @@ -26,8 +26,18 @@ final subaddrressSetLabelNative = moneroApi .lookup>('subaddress_set_label') .asFunction(); -void refreshSubaddresses({int accountIndex}) => +bool isUpdating = false; + +void refreshSubaddresses({@required int accountIndex}) { + try { + isUpdating = true; subaddressRefreshNative(accountIndex); + isUpdating = false; + } catch (e) { + isUpdating = false; + rethrow; + } +} List getAllSubaddresses() { final size = subaddressSizeNative(); @@ -48,7 +58,7 @@ void addSubaddressSync({int accountIndex, String label}) { void setLabelForSubaddressSync( {int accountIndex, int addressIndex, String label}) { final labelPointer = Utf8.toUtf8(label); - + subaddrressSetLabelNative(accountIndex, addressIndex, labelPointer); free(labelPointer); } @@ -70,7 +80,8 @@ void _setLabelForSubaddress(Map args) { } Future addSubaddress({int accountIndex, String label}) async => - compute, void>(_addSubaddress, {'accountIndex': accountIndex, 'label': label}); + compute, void>( + _addSubaddress, {'accountIndex': accountIndex, 'label': label}); Future setLabelForSubaddress( {int accountIndex, int addressIndex, String label}) => diff --git a/cw_monero/lib/wallet.dart b/cw_monero/lib/wallet.dart index c42cd3523..8a8731d9e 100644 --- a/cw_monero/lib/wallet.dart +++ b/cw_monero/lib/wallet.dart @@ -114,6 +114,8 @@ final rescanBlockchainAsyncNative = moneroApi .lookup>('rescan_blockchain') .asFunction(); +bool isStoring = false; + int getSyncingHeight() => getSyncingHeightNative(); bool isNeededToRefresh() => isNeededToRefreshNative() != 0; @@ -209,8 +211,8 @@ String getSecretSpendKey() => String getPublicSpendKey() => convertUTF8ToString(pointer: getPublicSpendKeyNative()); -class SyncListner { - SyncListner({this.onNewBlock, this.onNeedToRefresh, this.onNewTransaction}); +class SyncListener { + SyncListener({this.onNewBlock, this.onNeedToRefresh, this.onNewTransaction}); void Function(int, int, double) onNewBlock; void Function() onNeedToRefresh; @@ -234,7 +236,7 @@ class SyncListner { _lastKnownBlockHeight = 0; _initialSyncHeight = 0; _updateSyncInfoTimer ??= - Timer.periodic(Duration(milliseconds: 200), (_) async { + Timer.periodic(Duration(milliseconds: 1200), (_) async { final syncHeight = getSyncingHeight(); final needToRefresh = isNeededToRefresh(); final newTransactionExist = isNewTransactionExist(); @@ -251,7 +253,7 @@ class SyncListner { final ptc = diff <= 0 ? 0.0 : diff / line; final left = bchHeight - syncHeight; // 1. Actual new height; 2. Blocks left to finish; 3. Progress in percents; - onNewBlock(syncHeight, left, ptc); + onNewBlock?.call(syncHeight, left, ptc); } if (newTransactionExist) { @@ -267,9 +269,9 @@ class SyncListner { void stop() => _updateSyncInfoTimer?.cancel(); } -SyncListner setListeners(void Function(int, int, double) onNewBlock, +SyncListener setListeners(void Function(int, int, double) onNewBlock, void Function() onNeedToRefresh, void Function() onNewTransaction) { - final listener = SyncListner( + final listener = SyncListener( onNewBlock: onNewBlock, onNeedToRefresh: onNeedToRefresh, onNewTransaction: onNewTransaction); @@ -281,7 +283,20 @@ SyncListner setListeners(void Function(int, int, double) onNewBlock, void onStartup() => onStartupNative(); -void _storeSync(Object _) => storeSync(); +void _storeSync(Object _) { + if (isStoring) { + return; + } + + try { + isStoring = true; + storeSync(); + isStoring = false; + } catch (e) { + isStoring = false; + rethrow; + } +} bool _setupNodeSync(Map args) { final address = args['address'] as String; diff --git a/ios/Flutter/AppFrameworkInfo.plist b/ios/Flutter/AppFrameworkInfo.plist index 6b4c0f78a..c5ff5d37e 100644 --- a/ios/Flutter/AppFrameworkInfo.plist +++ b/ios/Flutter/AppFrameworkInfo.plist @@ -2,25 +2,25 @@ - CFBundleDevelopmentRegion - $(DEVELOPMENT_LANGUAGE) - CFBundleExecutable - App - CFBundleIdentifier - io.flutter.flutter.app - CFBundleInfoDictionaryVersion - 6.0 - CFBundleName - App - CFBundlePackageType - FMWK - CFBundleShortVersionString - 1.0 - CFBundleSignature - ???? - CFBundleVersion - 1.0 - MinimumOSVersion - 8.0 + CFBundleDevelopmentRegion + $(DEVELOPMENT_LANGUAGE) + CFBundleExecutable + App + CFBundleIdentifier + io.flutter.flutter.app + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + App + CFBundlePackageType + FMWK + CFBundleShortVersionString + 1.0 + CFBundleSignature + ???? + CFBundleVersion + 1.0 + MinimumOSVersion + 13.0 diff --git a/ios/Runner.xcodeproj/project.pbxproj b/ios/Runner.xcodeproj/project.pbxproj index 97e09ec63..0c0c2cf23 100644 --- a/ios/Runner.xcodeproj/project.pbxproj +++ b/ios/Runner.xcodeproj/project.pbxproj @@ -354,7 +354,7 @@ buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; CLANG_ENABLE_MODULES = YES; - CURRENT_PROJECT_VERSION = 10; + CURRENT_PROJECT_VERSION = 11; DEVELOPMENT_TEAM = 32J6BB6VUS; ENABLE_BITCODE = NO; FRAMEWORK_SEARCH_PATHS = ( @@ -362,6 +362,7 @@ "$(PROJECT_DIR)/Flutter", ); INFOPLIST_FILE = Runner/Info.plist; + IPHONEOS_DEPLOYMENT_TARGET = 13.0; LD_RUNPATH_SEARCH_PATHS = ( "$(inherited)", "@executable_path/Frameworks", @@ -493,7 +494,7 @@ buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; CLANG_ENABLE_MODULES = YES; - CURRENT_PROJECT_VERSION = 10; + CURRENT_PROJECT_VERSION = 11; DEVELOPMENT_TEAM = 32J6BB6VUS; ENABLE_BITCODE = NO; FRAMEWORK_SEARCH_PATHS = ( @@ -501,6 +502,7 @@ "$(PROJECT_DIR)/Flutter", ); INFOPLIST_FILE = Runner/Info.plist; + IPHONEOS_DEPLOYMENT_TARGET = 13.0; LD_RUNPATH_SEARCH_PATHS = ( "$(inherited)", "@executable_path/Frameworks", @@ -526,7 +528,7 @@ buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; CLANG_ENABLE_MODULES = YES; - CURRENT_PROJECT_VERSION = 10; + CURRENT_PROJECT_VERSION = 11; DEVELOPMENT_TEAM = 32J6BB6VUS; ENABLE_BITCODE = NO; FRAMEWORK_SEARCH_PATHS = ( @@ -534,6 +536,7 @@ "$(PROJECT_DIR)/Flutter", ); INFOPLIST_FILE = Runner/Info.plist; + IPHONEOS_DEPLOYMENT_TARGET = 13.0; LD_RUNPATH_SEARCH_PATHS = ( "$(inherited)", "@executable_path/Frameworks", diff --git a/lib/monero/get_height_by_date.dart b/lib/monero/get_height_by_date.dart index d6dff557e..3f5f87623 100644 --- a/lib/monero/get_height_by_date.dart +++ b/lib/monero/get_height_by_date.dart @@ -67,8 +67,22 @@ final dates = { "2019-5": 1824671, "2019-6": 1847005, "2019-7": 1868590, - "2019-8": 1888590, - "2019-9": 1898590, + "2019-8": 1890552, + "2019-9": 1912212, + "2019-10": 1932200, + "2019-11": 1957040, + "2019-12": 1978090, + "2020-1": 2001290, + "2020-2": 2022688, + "2020-3": 2043987, + "2020-4": 2066536, + "2020-5": 2090797, + "2020-6": 2111633, + "2020-7": 2131433, + "2020-8": 2153983, + "2020-9": 2176466, + "2020-10": 2198453, + "2020-11": 2221803 }; int getHeigthByDate({DateTime date}) { diff --git a/lib/monero/monero_wallet.dart b/lib/monero/monero_wallet.dart index 59ac8702a..9840eb2c5 100644 --- a/lib/monero/monero_wallet.dart +++ b/lib/monero/monero_wallet.dart @@ -19,7 +19,6 @@ import 'package:cake_wallet/entities/wallet_info.dart'; import 'package:cake_wallet/entities/node.dart'; import 'package:cake_wallet/entities/transaction_priority.dart'; - part 'monero_wallet.g.dart'; const moneroBlockSize = 1000; @@ -80,7 +79,7 @@ abstract class MoneroWalletBase extends WalletBase with Store { final MoneroAccountList accountList; String _filename; - SyncListner _listener; + SyncListener _listener; ReactionDisposer _onAccountChangeReaction; int _cachedRefreshHeight; @@ -96,6 +95,15 @@ abstract class MoneroWalletBase extends WalletBase with Store { address = subaddress.address; _setListeners(); await transactionHistory.update(); + + if (walletInfo.isRecovery) { + monero_wallet.setRecoveringFromSeed(isRecovery: walletInfo.isRecovery); + + if (monero_wallet.getCurrentHeight() <= 1) { + monero_wallet.setRefreshFromBlockHeight( + height: walletInfo.restoreHeight); + } + } } void close() { @@ -103,6 +111,24 @@ abstract class MoneroWalletBase extends WalletBase with Store { _onAccountChangeReaction?.reaction?.dispose(); } + Future validate() async { + await accountList.update(); + final accountListLength = accountList.accounts?.length ?? 0; + + if (accountListLength <= 0) { + return false; + } + + subaddressList.update(accountIndex: accountList.accounts.first.id); + final subaddressListLength = subaddressList.subaddresses?.length ?? 0; + + if (subaddressListLength <= 0) { + return false; + } + + return true; + } + @override Future connectToNode({@required Node node}) async { try { @@ -275,8 +301,6 @@ abstract class MoneroWalletBase extends WalletBase with Store { return; } - syncStatus = SyncedSyncStatus(); - if (walletInfo.isRecovery) { _askForUpdateTransactionHistory(); _askForUpdateBalance(); @@ -285,11 +309,19 @@ abstract class MoneroWalletBase extends WalletBase with Store { final currentHeight = getCurrentHeight(); final nodeHeight = monero_wallet.getNodeHeightSync(); - if (walletInfo.isRecovery && - (nodeHeight - currentHeight < moneroBlockSize)) { - await setAsRecovered(); + if (nodeHeight - currentHeight < moneroBlockSize) { + syncStatus = SyncedSyncStatus(); + + if (walletInfo.isRecovery) { + await setAsRecovered(); + } } + // if (walletInfo.isRecovery && + // (nodeHeight - currentHeight < moneroBlockSize)) { + // await setAsRecovered(); + // } + if (currentHeight - _cachedRefreshHeight > moneroBlockSize) { _cachedRefreshHeight = currentHeight; await save(); diff --git a/lib/monero/monero_wallet_service.dart b/lib/monero/monero_wallet_service.dart index 5461d94d4..ac44147a4 100644 --- a/lib/monero/monero_wallet_service.dart +++ b/lib/monero/monero_wallet_service.dart @@ -25,6 +25,11 @@ class MoneroRestoreWalletFromSeedCredentials extends WalletCredentials { final String mnemonic; } +class MoneroWalletLoadingException implements Exception { + @override + String toString() => 'The wallet is damaged.'; +} + class MoneroRestoreWalletFromKeysCredentials extends WalletCredentials { MoneroRestoreWalletFromKeysCredentials( {String name, @@ -88,11 +93,29 @@ class MoneroWalletService extends WalletService< Future openWallet(String name, String password) async { try { final path = await pathForWallet(name: name, type: WalletType.monero); - await monero_wallet_manager.openWalletAsync({'path': path, 'password': password}); + await monero_wallet_manager + .openWalletAsync({'path': path, 'password': password}); final walletInfo = walletInfoSource.values.firstWhere( - (info) => info.id == WalletBase.idFor(name, WalletType.monero), orElse: () => null); + (info) => info.id == WalletBase.idFor(name, WalletType.monero), + orElse: () => null); final wallet = MoneroWallet( filename: monero_wallet.getFilename(), walletInfo: walletInfo); + final isValid = await wallet.validate(); + + if (!isValid) { + if (wallet.seed?.isNotEmpty ?? false) { + // let restore from seed in this case; + final seed = wallet.seed; + final credentials = MoneroRestoreWalletFromSeedCredentials( + name: name, password: password, mnemonic: seed, height: 2000000) + ..walletInfo = walletInfo; + await remove(name); + return restoreFromSeed(credentials); + } + + throw MoneroWalletLoadingException(); + } + await wallet.init(); return wallet; @@ -104,9 +127,15 @@ class MoneroWalletService extends WalletService< } @override - Future remove(String wallet) async => - File(await pathForWalletDir(name: wallet, type: WalletType.bitcoin)) - .delete(recursive: true); + Future remove(String wallet) async { + final path = await pathForWalletDir(name: wallet, type: WalletType.monero); + final file = Directory(path); + final isExist = file.existsSync(); + + if (isExist) { + await file.delete(recursive: true); + } + } @override Future restoreFromKeys( diff --git a/lib/src/widgets/annotated_editable_text.dart b/lib/src/widgets/annotated_editable_text.dart index 1d2ada1fb..cc42d9b35 100644 --- a/lib/src/widgets/annotated_editable_text.dart +++ b/lib/src/widgets/annotated_editable_text.dart @@ -32,42 +32,41 @@ class AnnotatedEditableText extends EditableText { Color selectionColor, Color backgroundCursorColor, TextSelectionControls selectionControls, + TextStyle textStyle = const TextStyle( + color: Colors.black, + backgroundColor: Colors.transparent, + fontWeight: FontWeight.normal, + fontSize: 16), @required this.words, }) : textAnnotations = words - .map((word) => TextAnnotation( - text: word, - style: TextStyle( - color: Colors.black, - backgroundColor: Colors.transparent, - fontWeight: FontWeight.normal, - fontSize: 16))) - .toList(), + .map((word) => TextAnnotation(text: word, style: textStyle)) + .toList(), super( - maxLines: null, - key: key, - focusNode: focusNode, - controller: controller, - cursorColor: cursorColor, - style: style, - keyboardType: TextInputType.text, - autocorrect: false, - autofocus: false, - selectionColor: selectionColor, - selectionControls: selectionControls, - backgroundCursorColor: backgroundCursorColor, - onChanged: onChanged, - onSubmitted: onSubmitted, - toolbarOptions: const ToolbarOptions( - copy: true, - cut: true, - paste: true, - selectAll: true, - ), - enableSuggestions: false, - enableInteractiveSelection: true, - showSelectionHandles: true, - showCursor: true, - ) { + maxLines: null, + key: key, + focusNode: focusNode, + controller: controller, + cursorColor: cursorColor, + style: style, + keyboardType: TextInputType.text, + autocorrect: false, + autofocus: false, + selectionColor: selectionColor, + selectionControls: selectionControls, + backgroundCursorColor: backgroundCursorColor, + onChanged: onChanged, + onSubmitted: onSubmitted, + toolbarOptions: const ToolbarOptions( + copy: true, + cut: true, + paste: true, + selectAll: true, + ), + enableSuggestions: false, + enableInteractiveSelection: true, + showSelectionHandles: true, + showCursor: true, + ) { textAnnotations.add(TextAnnotation( text: ' ', style: TextStyle(backgroundColor: Colors.transparent))); } @@ -86,7 +85,7 @@ class AnnotatedEditableTextState extends EditableTextState { List getRanges() { final source = widget.textAnnotations .map((item) => range(item.text, textEditingValue.text) - .map((range) => Annotation(style: item.style, range: range))) + .map((range) => Annotation(style: item.style, range: range))) .expand((e) => e) .toList(); final result = List(); @@ -123,7 +122,7 @@ class AnnotatedEditableTextState extends EditableTextState { if (result.length > 0 && result.last.range.end < text.length) { result.add(Annotation( range: TextRange(start: result.last.range.end, end: text.length), - style: TextStyle( backgroundColor: Colors.transparent))); + style: TextStyle(backgroundColor: Colors.transparent))); } return result; } @@ -132,8 +131,8 @@ class AnnotatedEditableTextState extends EditableTextState { final result = List(); for (int index = source.indexOf(pattern); - index >= 0; - index = source.indexOf(pattern, index + 1)) { + index >= 0; + index = source.indexOf(pattern, index + 1)) { final start = index; final end = start + pattern.length; result.add(TextRange(start: start, end: end)); @@ -152,10 +151,10 @@ class AnnotatedEditableTextState extends EditableTextState { style: widget.style, children: ranges .map((item) => TextSpan( - style: item.style, text: item.range.textInside(text))) + style: item.style, text: item.range.textInside(text))) .toList()); } return TextSpan(style: widget.style, text: text); } -} \ No newline at end of file +} diff --git a/lib/src/widgets/seed_widget.dart b/lib/src/widgets/seed_widget.dart index d77828d73..05589cdad 100644 --- a/lib/src/widgets/seed_widget.dart +++ b/lib/src/widgets/seed_widget.dart @@ -78,16 +78,22 @@ class SeedWidgetState extends State { Padding( padding: EdgeInsets.only(right: 40, top: 10), child: AnnotatedEditableText( - cursorColor: Colors.green, - backgroundCursorColor: Colors.blue, - style: TextStyle( - fontSize: 20, - color: Colors.red, - fontWeight: FontWeight.normal, - backgroundColor: Colors.transparent), - focusNode: focusNode, - controller: controller, - words: words)), + cursorColor: Colors.blue, + backgroundCursorColor: Colors.blue, + style: TextStyle( + fontSize: 16, + color: Colors.red, + fontWeight: FontWeight.normal, + backgroundColor: Colors.transparent), + focusNode: focusNode, + controller: controller, + words: words, + textStyle: TextStyle( + color: Theme.of(context).primaryTextTheme.title.color, + backgroundColor: Colors.transparent, + fontWeight: FontWeight.normal, + fontSize: 16), + )), Positioned( top: 0, right: 0, diff --git a/lib/view_model/wallet_creation_vm.dart b/lib/view_model/wallet_creation_vm.dart index 01893c954..d29002f2b 100644 --- a/lib/view_model/wallet_creation_vm.dart +++ b/lib/view_model/wallet_creation_vm.dart @@ -34,8 +34,8 @@ abstract class WalletCreationVMBase with Store { Future create({dynamic options}) async { try { - name = await generateName(); state = IsExecutingState(); + name = await generateName(); final dirPath = await pathForWalletDir(name: name, type: type); final path = await pathForWallet(name: name, type: type); final credentials = getCredentials(options); diff --git a/lib/view_model/wallet_restore_view_model.dart b/lib/view_model/wallet_restore_view_model.dart index 52e95b818..4c2411a23 100644 --- a/lib/view_model/wallet_restore_view_model.dart +++ b/lib/view_model/wallet_restore_view_model.dart @@ -55,7 +55,8 @@ abstract class WalletRestoreViewModelBase extends WalletCreationVM with Store { spendKey: spendKey, viewKey: viewKey, address: address, - password: password); + password: password, + language: 'English'); } return null; diff --git a/pubspec.lock b/pubspec.lock index f4bf8a412..6a626d9cf 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -7,14 +7,14 @@ packages: name: _fe_analyzer_shared url: "https://pub.dartlang.org" source: hosted - version: "11.0.0" + version: "12.0.0" analyzer: dependency: transitive description: name: analyzer url: "https://pub.dartlang.org" source: hosted - version: "0.40.4" + version: "0.40.5" archive: dependency: transitive description: @@ -140,7 +140,7 @@ packages: name: build_runner url: "https://pub.dartlang.org" source: hosted - version: "1.10.3" + version: "1.10.4" build_runner_core: dependency: transitive description: @@ -575,14 +575,14 @@ packages: name: mobx url: "https://pub.dartlang.org" source: hosted - version: "1.2.1+3" + version: "1.2.1+4" mobx_codegen: dependency: "direct dev" description: name: mobx_codegen url: "https://pub.dartlang.org" source: hosted - version: "1.1.1+1" + version: "1.1.1+3" node_interop: dependency: transitive description: @@ -729,7 +729,7 @@ packages: name: protobuf url: "https://pub.dartlang.org" source: hosted - version: "1.0.1" + version: "1.1.0" provider: dependency: "direct main" description: @@ -764,7 +764,7 @@ packages: name: quiver url: "https://pub.dartlang.org" source: hosted - version: "2.1.3" + version: "2.1.4+1" rxdart: dependency: "direct main" description: @@ -778,7 +778,7 @@ packages: name: share url: "https://pub.dartlang.org" source: hosted - version: "0.6.5+3" + version: "0.6.5+4" shared_preferences: dependency: "direct main" description: @@ -853,7 +853,7 @@ packages: name: source_gen url: "https://pub.dartlang.org" source: hosted - version: "0.9.7+1" + version: "0.9.8" source_span: dependency: transitive description: @@ -1023,5 +1023,5 @@ packages: source: hosted version: "2.2.1" sdks: - dart: ">=2.10.0-110 <2.11.0" + dart: ">=2.10.0 <2.11.0" flutter: ">=1.22.0 <2.0.0" From 882f13011c70247d1686d229dbba486c2a4d5767 Mon Sep 17 00:00:00 2001 From: M Date: Thu, 29 Oct 2020 20:10:09 +0200 Subject: [PATCH 08/58] Fixes. --- .../dashboard/widgets/filter_widget.dart | 2 +- .../screens/disclaimer/disclaimer_page.dart | 497 +++++++++--------- .../dashboard/dashboard_view_model.dart | 18 +- lib/view_model/dashboard/filter_item.dart | 2 +- 4 files changed, 261 insertions(+), 258 deletions(-) diff --git a/lib/src/screens/dashboard/widgets/filter_widget.dart b/lib/src/screens/dashboard/widgets/filter_widget.dart index d5197c355..c6f3bb412 100644 --- a/lib/src/screens/dashboard/widgets/filter_widget.dart +++ b/lib/src/screens/dashboard/widgets/filter_widget.dart @@ -97,7 +97,7 @@ class FilterWidget extends StatelessWidget { final item = section[index2]; final content = item.onChanged != null ? CheckboxWidget( - value: item.value, + value: item.value(), caption: item.caption, onChanged: item.onChanged ) diff --git a/lib/src/screens/disclaimer/disclaimer_page.dart b/lib/src/screens/disclaimer/disclaimer_page.dart index 2142b2bd4..dc2eaa708 100644 --- a/lib/src/screens/disclaimer/disclaimer_page.dart +++ b/lib/src/screens/disclaimer/disclaimer_page.dart @@ -62,266 +62,269 @@ class DisclaimerBodyState extends State { @override Widget build(BuildContext context) { - return Container( - color: Theme.of(context).backgroundColor, - child: Column( - children: [ - SizedBox(height: 10.0), - Expanded( - child: Stack( + return WillPopScope( + onWillPop: () async => false, + child: Container( + color: Theme.of(context).backgroundColor, + child: Column( children: [ - SingleChildScrollView( - padding: EdgeInsets.only(left: 24.0, right: 24.0), - child: Column( - children: [ - Row( + SizedBox(height: 10.0), + Expanded( + child: Stack( + children: [ + SingleChildScrollView( + padding: EdgeInsets.only(left: 24.0, right: 24.0), + child: Column( children: [ - Expanded( - child: Text( - 'Terms and conditions', - textAlign: TextAlign.center, - style: TextStyle( - fontSize: 20.0, - fontWeight: FontWeight.bold, - color: Theme.of(context) - .primaryTextTheme - .title - .color), - ), - ) - ], - ), - SizedBox( - height: 20.0, - ), - Row( - children: [ - Expanded( - child: Text( - 'Legal Disclaimer\nAnd\nTerms of Use', - textAlign: TextAlign.center, - style: TextStyle( - fontSize: 12.0, - fontWeight: FontWeight.bold, - color: Theme.of(context) - .primaryTextTheme - .title - .color), - ), - ) - ], - ), - SizedBox( - height: 16.0, - ), - Row( - children: [ - Expanded( - child: Text( - _fileText, - style: TextStyle( - fontSize: 12.0, - fontWeight: FontWeight.normal, - color: Theme.of(context) - .primaryTextTheme - .title - .color), - )) - ], - ), - SizedBox( - height: 16.0, - ), - Row( - mainAxisAlignment: MainAxisAlignment.start, - children: [ - Expanded( - child: Text( - 'Other Terms and Conditions', - textAlign: TextAlign.left, - style: TextStyle( - fontSize: 14.0, - fontWeight: FontWeight.bold, - color: Theme.of(context) - .primaryTextTheme - .title - .color), - ), - ) - ], - ), - SizedBox( - height: 16.0, - ), - Row( - mainAxisAlignment: MainAxisAlignment.start, - children: [ - Expanded( - child: GestureDetector( - onTap: () => launchUrl(xmrtoUrl), - child: Text( - xmrtoUrl, - textAlign: TextAlign.left, - style: TextStyle( - color: Palette.blueCraiola, - fontSize: 14.0, - fontWeight: FontWeight.normal, - decoration: TextDecoration.underline), - ), - )) - ], - ), - SizedBox( - height: 16.0, - ), - Row( - mainAxisAlignment: MainAxisAlignment.start, - children: [ - Expanded( - child: GestureDetector( - onTap: () => launchUrl(changenowUrl), - child: Text( - changenowUrl, - textAlign: TextAlign.left, - style: TextStyle( - color: Palette.blueCraiola, - fontSize: 14.0, - fontWeight: FontWeight.normal, - decoration: TextDecoration.underline), - ), - )) - ], - ), - SizedBox( - height: 16.0, - ), - Row( - mainAxisAlignment: MainAxisAlignment.start, - children: [ - Expanded( - child: GestureDetector( - onTap: () => launchUrl(morphUrl), - child: Text( - morphUrl, - textAlign: TextAlign.left, - style: TextStyle( - color: Palette.blueCraiola, - fontSize: 14.0, - fontWeight: FontWeight.normal, - decoration: TextDecoration.underline), - ), - )) - ], - ), - SizedBox( - height: 16.0, - ) - ], - ), - ), - Container( - alignment: Alignment.bottomCenter, - child: Container( - height: 12.0, - child: ClipRect( - child: BackdropFilter( - filter: ImageFilter.blur(sigmaX: 0.7, sigmaY: 0.7), - child: Container( - decoration: BoxDecoration( - gradient: LinearGradient( - colors: [ - Theme.of(context) - .backgroundColor - .withOpacity(0.0), - Theme.of(context).backgroundColor, - ], - begin: FractionalOffset.topCenter, - end: FractionalOffset.bottomCenter, - ), - ), - ), - ), - ), - ), - ) - ], - )), - if (!widget.isReadOnly) ...[ - Row( - children: [ - Expanded( - child: Container( - padding: EdgeInsets.only( - left: 24.0, top: 10.0, right: 24.0, bottom: 10.0), - child: InkWell( - onTap: () { - setState(() { - _checked = !_checked; - }); - }, - child: Row( - mainAxisAlignment: MainAxisAlignment.start, + Row( children: [ - Container( - height: 24.0, - width: 24.0, - margin: EdgeInsets.only( - right: 10.0, + Expanded( + child: Text( + 'Terms and conditions', + textAlign: TextAlign.center, + style: TextStyle( + fontSize: 20.0, + fontWeight: FontWeight.bold, + color: Theme.of(context) + .primaryTextTheme + .title + .color), ), - decoration: BoxDecoration( - border: Border.all( - color: Theme.of(context) - .primaryTextTheme - .caption - .color, - width: 1.0), - borderRadius: - BorderRadius.all(Radius.circular(8.0)), - color: Theme.of(context).backgroundColor), - child: _checked - ? Icon( - Icons.check, - color: Colors.blue, - size: 20.0, - ) - : null, - ), - Text( - 'I agree to Terms of Use', + ) + ], + ), + SizedBox( + height: 20.0, + ), + Row( + children: [ + Expanded( + child: Text( + 'Legal Disclaimer\nAnd\nTerms of Use', + textAlign: TextAlign.center, + style: TextStyle( + fontSize: 12.0, + fontWeight: FontWeight.bold, + color: Theme.of(context) + .primaryTextTheme + .title + .color), + ), + ) + ], + ), + SizedBox( + height: 16.0, + ), + Row( + children: [ + Expanded( + child: Text( + _fileText, style: TextStyle( - fontWeight: FontWeight.bold, - fontSize: 14.0, + fontSize: 12.0, + fontWeight: FontWeight.normal, color: Theme.of(context) .primaryTextTheme .title .color), + )) + ], + ), + SizedBox( + height: 16.0, + ), + Row( + mainAxisAlignment: MainAxisAlignment.start, + children: [ + Expanded( + child: Text( + 'Other Terms and Conditions', + textAlign: TextAlign.left, + style: TextStyle( + fontSize: 14.0, + fontWeight: FontWeight.bold, + color: Theme.of(context) + .primaryTextTheme + .title + .color), + ), ) ], ), - )), + SizedBox( + height: 16.0, + ), + Row( + mainAxisAlignment: MainAxisAlignment.start, + children: [ + Expanded( + child: GestureDetector( + onTap: () => launchUrl(xmrtoUrl), + child: Text( + xmrtoUrl, + textAlign: TextAlign.left, + style: TextStyle( + color: Palette.blueCraiola, + fontSize: 14.0, + fontWeight: FontWeight.normal, + decoration: TextDecoration.underline), + ), + )) + ], + ), + SizedBox( + height: 16.0, + ), + Row( + mainAxisAlignment: MainAxisAlignment.start, + children: [ + Expanded( + child: GestureDetector( + onTap: () => launchUrl(changenowUrl), + child: Text( + changenowUrl, + textAlign: TextAlign.left, + style: TextStyle( + color: Palette.blueCraiola, + fontSize: 14.0, + fontWeight: FontWeight.normal, + decoration: TextDecoration.underline), + ), + )) + ], + ), + SizedBox( + height: 16.0, + ), + Row( + mainAxisAlignment: MainAxisAlignment.start, + children: [ + Expanded( + child: GestureDetector( + onTap: () => launchUrl(morphUrl), + child: Text( + morphUrl, + textAlign: TextAlign.left, + style: TextStyle( + color: Palette.blueCraiola, + fontSize: 14.0, + fontWeight: FontWeight.normal, + decoration: TextDecoration.underline), + ), + )) + ], + ), + SizedBox( + height: 16.0, + ) + ], + ), + ), + Container( + alignment: Alignment.bottomCenter, + child: Container( + height: 12.0, + child: ClipRect( + child: BackdropFilter( + filter: ImageFilter.blur(sigmaX: 0.7, sigmaY: 0.7), + child: Container( + decoration: BoxDecoration( + gradient: LinearGradient( + colors: [ + Theme.of(context) + .backgroundColor + .withOpacity(0.0), + Theme.of(context).backgroundColor, + ], + begin: FractionalOffset.topCenter, + end: FractionalOffset.bottomCenter, + ), + ), + ), + ), + ), + ), + ) + ], + )), + if (!widget.isReadOnly) ...[ + Row( + children: [ + Expanded( + child: Container( + padding: EdgeInsets.only( + left: 24.0, top: 10.0, right: 24.0, bottom: 10.0), + child: InkWell( + onTap: () { + setState(() { + _checked = !_checked; + }); + }, + child: Row( + mainAxisAlignment: MainAxisAlignment.start, + children: [ + Container( + height: 24.0, + width: 24.0, + margin: EdgeInsets.only( + right: 10.0, + ), + decoration: BoxDecoration( + border: Border.all( + color: Theme.of(context) + .primaryTextTheme + .caption + .color, + width: 1.0), + borderRadius: BorderRadius.all( + Radius.circular(8.0)), + color: Theme.of(context).backgroundColor), + child: _checked + ? Icon( + Icons.check, + color: Colors.blue, + size: 20.0, + ) + : null, + ), + Text( + 'I agree to Terms of Use', + style: TextStyle( + fontWeight: FontWeight.bold, + fontSize: 14.0, + color: Theme.of(context) + .primaryTextTheme + .title + .color), + ) + ], + ), + )), + ), + ], + ), + Container( + padding: + EdgeInsets.only(left: 24.0, right: 24.0, bottom: 24.0), + child: PrimaryButton( + onPressed: _checked + ? () => Navigator.of(context) + .popAndPushNamed(Routes.welcome) + : null, + text: 'Accept', + color: Theme.of(context) + .accentTextTheme + .subtitle + .decorationColor, + textColor: Theme.of(context) + .accentTextTheme + .headline + .decorationColor), ), ], - ), - Container( - padding: EdgeInsets.only(left: 24.0, right: 24.0, bottom: 24.0), - child: PrimaryButton( - onPressed: _checked - ? () => - Navigator.of(context).popAndPushNamed(Routes.welcome) - : null, - text: 'Accept', - color: Theme.of(context) - .accentTextTheme - .subtitle - .decorationColor, - textColor: Theme.of(context) - .accentTextTheme - .headline - .decorationColor), - ), - ], - ], - ), - ); + ], + ), + )); } } diff --git a/lib/view_model/dashboard/dashboard_view_model.dart b/lib/view_model/dashboard/dashboard_view_model.dart index 1dacbd949..500c9fb92 100644 --- a/lib/view_model/dashboard/dashboard_view_model.dart +++ b/lib/view_model/dashboard/dashboard_view_model.dart @@ -39,31 +39,31 @@ abstract class DashboardViewModelBase with Store { filterItems = { S.current.transactions: [ FilterItem( - value: transactionFilterStore.displayIncoming, + value: () => transactionFilterStore.displayIncoming, caption: S.current.incoming, onChanged: (value) => transactionFilterStore.toggleIncoming()), FilterItem( - value: transactionFilterStore.displayOutgoing, + value: () => transactionFilterStore.displayOutgoing, caption: S.current.outgoing, onChanged: (value) => transactionFilterStore.toggleOutgoing()), - FilterItem( - value: false, - caption: S.current.transactions_by_date, - onChanged: null), + // FilterItem( + // value: () => false, + // caption: S.current.transactions_by_date, + // onChanged: null), ], S.current.trades: [ FilterItem( - value: tradeFilterStore.displayXMRTO, + value: () => tradeFilterStore.displayXMRTO, caption: 'XMR.TO', onChanged: (value) => tradeFilterStore .toggleDisplayExchange(ExchangeProviderDescription.xmrto)), FilterItem( - value: tradeFilterStore.displayChangeNow, + value: () => tradeFilterStore.displayChangeNow, caption: 'Change.NOW', onChanged: (value) => tradeFilterStore .toggleDisplayExchange(ExchangeProviderDescription.changeNow)), FilterItem( - value: tradeFilterStore.displayMorphToken, + value: () => tradeFilterStore.displayMorphToken, caption: 'MorphToken', onChanged: (value) => tradeFilterStore .toggleDisplayExchange(ExchangeProviderDescription.morphToken)), diff --git a/lib/view_model/dashboard/filter_item.dart b/lib/view_model/dashboard/filter_item.dart index 33500b345..28e1524bb 100644 --- a/lib/view_model/dashboard/filter_item.dart +++ b/lib/view_model/dashboard/filter_item.dart @@ -1,7 +1,7 @@ class FilterItem { FilterItem({this.value, this.caption, this.onChanged}); - bool value; + bool Function() value; String caption; Function(bool) onChanged; } \ No newline at end of file From 68f748b09afd35865ea41d4e6bc32260284532e0 Mon Sep 17 00:00:00 2001 From: M Date: Fri, 30 Oct 2020 12:39:07 +0200 Subject: [PATCH 09/58] Changed min ios version to 11.0. Fixes. --- ios/Flutter/AppFrameworkInfo.plist | 2 +- ios/Runner.xcodeproj/project.pbxproj | 12 ++++++------ lib/view_model/exchange/exchange_view_model.dart | 2 ++ pubspec.lock | 2 +- 4 files changed, 10 insertions(+), 8 deletions(-) diff --git a/ios/Flutter/AppFrameworkInfo.plist b/ios/Flutter/AppFrameworkInfo.plist index c5ff5d37e..cb6be3098 100644 --- a/ios/Flutter/AppFrameworkInfo.plist +++ b/ios/Flutter/AppFrameworkInfo.plist @@ -21,6 +21,6 @@ CFBundleVersion 1.0 MinimumOSVersion - 13.0 + 11.0 diff --git a/ios/Runner.xcodeproj/project.pbxproj b/ios/Runner.xcodeproj/project.pbxproj index 0c0c2cf23..80e5a8a00 100644 --- a/ios/Runner.xcodeproj/project.pbxproj +++ b/ios/Runner.xcodeproj/project.pbxproj @@ -354,7 +354,7 @@ buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; CLANG_ENABLE_MODULES = YES; - CURRENT_PROJECT_VERSION = 11; + CURRENT_PROJECT_VERSION = 12; DEVELOPMENT_TEAM = 32J6BB6VUS; ENABLE_BITCODE = NO; FRAMEWORK_SEARCH_PATHS = ( @@ -362,7 +362,7 @@ "$(PROJECT_DIR)/Flutter", ); INFOPLIST_FILE = Runner/Info.plist; - IPHONEOS_DEPLOYMENT_TARGET = 13.0; + IPHONEOS_DEPLOYMENT_TARGET = 11.0; LD_RUNPATH_SEARCH_PATHS = ( "$(inherited)", "@executable_path/Frameworks", @@ -494,7 +494,7 @@ buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; CLANG_ENABLE_MODULES = YES; - CURRENT_PROJECT_VERSION = 11; + CURRENT_PROJECT_VERSION = 12; DEVELOPMENT_TEAM = 32J6BB6VUS; ENABLE_BITCODE = NO; FRAMEWORK_SEARCH_PATHS = ( @@ -502,7 +502,7 @@ "$(PROJECT_DIR)/Flutter", ); INFOPLIST_FILE = Runner/Info.plist; - IPHONEOS_DEPLOYMENT_TARGET = 13.0; + IPHONEOS_DEPLOYMENT_TARGET = 11.0; LD_RUNPATH_SEARCH_PATHS = ( "$(inherited)", "@executable_path/Frameworks", @@ -528,7 +528,7 @@ buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; CLANG_ENABLE_MODULES = YES; - CURRENT_PROJECT_VERSION = 11; + CURRENT_PROJECT_VERSION = 12; DEVELOPMENT_TEAM = 32J6BB6VUS; ENABLE_BITCODE = NO; FRAMEWORK_SEARCH_PATHS = ( @@ -536,7 +536,7 @@ "$(PROJECT_DIR)/Flutter", ); INFOPLIST_FILE = Runner/Info.plist; - IPHONEOS_DEPLOYMENT_TARGET = 13.0; + IPHONEOS_DEPLOYMENT_TARGET = 11.0; LD_RUNPATH_SEARCH_PATHS = ( "$(inherited)", "@executable_path/Frameworks", diff --git a/lib/view_model/exchange/exchange_view_model.dart b/lib/view_model/exchange/exchange_view_model.dart index e135529ef..2f8d28cd4 100644 --- a/lib/view_model/exchange/exchange_view_model.dart +++ b/lib/view_model/exchange/exchange_view_model.dart @@ -227,6 +227,8 @@ abstract class ExchangeViewModelBase with Store { currency = depositCurrency; } + amount = amount.replaceAll(',', '.'); + if (limitsState is LimitsLoadedSuccessfully && amount != null) { if (double.parse(amount) < limits.min) { tradeState = TradeIsCreatedFailure( diff --git a/pubspec.lock b/pubspec.lock index 6a626d9cf..a04e9e780 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -273,7 +273,7 @@ packages: name: dart_style url: "https://pub.dartlang.org" source: hosted - version: "1.3.8" + version: "1.3.8+1" dartx: dependency: transitive description: From 18e2df4f4076f1189e9e0a6982652a915ed2ce93 Mon Sep 17 00:00:00 2001 From: OleksandrSobol Date: Fri, 30 Oct 2020 14:42:23 +0200 Subject: [PATCH 10/58] CAKE-135 | removed validation alert in the send and exchange pages when clear/reset buttons was pushed (applied _formKey.currentState.reset()) --- lib/src/screens/exchange/exchange_page.dart | 5 ++++- lib/src/screens/send/send_page.dart | 5 ++++- lib/view_model/send/send_view_model.dart | 1 + 3 files changed, 9 insertions(+), 2 deletions(-) diff --git a/lib/src/screens/exchange/exchange_page.dart b/lib/src/screens/exchange/exchange_page.dart index add3d9c19..87bf6508a 100644 --- a/lib/src/screens/exchange/exchange_page.dart +++ b/lib/src/screens/exchange/exchange_page.dart @@ -61,7 +61,10 @@ class ExchangePage extends BasePage { @override Widget trailing(BuildContext context) => TrailButton( - caption: S.of(context).reset, onPressed: () => exchangeViewModel.reset()); + caption: S.of(context).reset, onPressed: () { + _formKey.currentState.reset(); + exchangeViewModel.reset(); + }); @override Widget body(BuildContext context) { diff --git a/lib/src/screens/send/send_page.dart b/lib/src/screens/send/send_page.dart index 459e435d5..d9215ae7f 100644 --- a/lib/src/screens/send/send_page.dart +++ b/lib/src/screens/send/send_page.dart @@ -70,7 +70,10 @@ class SendPage extends BasePage { @override Widget trailing(context) => TrailButton( - caption: S.of(context).clear, onPressed: () => sendViewModel.reset()); + caption: S.of(context).clear, onPressed: () { + _formKey.currentState.reset(); + sendViewModel.reset(); + }); @override Widget body(BuildContext context) { diff --git a/lib/view_model/send/send_view_model.dart b/lib/view_model/send/send_view_model.dart index d49be63f7..360af7f9c 100644 --- a/lib/view_model/send/send_view_model.dart +++ b/lib/view_model/send/send_view_model.dart @@ -107,6 +107,7 @@ abstract class SendViewModelBase with Store { @action void reset() { + sendAll = false; cryptoAmount = ''; fiatAmount = ''; address = ''; From 9748caf4076780acfd8a1f9850d0d52f37f2cdd8 Mon Sep 17 00:00:00 2001 From: OleksandrSobol Date: Fri, 30 Oct 2020 15:11:20 +0200 Subject: [PATCH 11/58] CAKE-136 | added "-" symbol to node_address_validator.dart; changed minLength from 1 to 0 in the node_port_validator.dart --- lib/core/node_address_validator.dart | 2 +- lib/core/node_port_validator.dart | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/core/node_address_validator.dart b/lib/core/node_address_validator.dart index 676a768ea..0e034dabc 100644 --- a/lib/core/node_address_validator.dart +++ b/lib/core/node_address_validator.dart @@ -6,5 +6,5 @@ class NodeAddressValidator extends TextValidator { : super( errorMessage: S.current.error_text_node_address, pattern: - '^((25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\$|^[0-9a-zA-Z.]+\$'); + '^((25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\$|^[0-9a-zA-Z.\-]+\$'); } diff --git a/lib/core/node_port_validator.dart b/lib/core/node_port_validator.dart index b7a2f0221..16be00dde 100644 --- a/lib/core/node_port_validator.dart +++ b/lib/core/node_port_validator.dart @@ -6,7 +6,7 @@ class NodePortValidator extends TextValidator { NodePortValidator() : super( errorMessage: S.current.error_text_node_port, - minLength: 1, + minLength: 0, maxLength: 5, pattern: '^[0-9]'); } From f59812fe4a2e05f7c483998a6a2fa834c92f0e75 Mon Sep 17 00:00:00 2001 From: M Date: Fri, 30 Oct 2020 15:33:03 +0200 Subject: [PATCH 12/58] CAKE-83 --- lib/src/widgets/picker.dart | 1 + 1 file changed, 1 insertion(+) diff --git a/lib/src/widgets/picker.dart b/lib/src/widgets/picker.dart index 17db6e82e..ff6116dfd 100644 --- a/lib/src/widgets/picker.dart +++ b/lib/src/widgets/picker.dart @@ -90,6 +90,7 @@ class PickerState extends State { alignment: Alignment.center, children: [ ListView.separated( + padding: EdgeInsets.all(0), controller: controller, separatorBuilder: (context, index) => Divider( color: Theme.of(context).accentTextTheme.title.backgroundColor, From ed72cee3f4f0f5ac577ac5517cd88d1365ba98c3 Mon Sep 17 00:00:00 2001 From: M Date: Fri, 30 Oct 2020 15:56:23 +0200 Subject: [PATCH 13/58] CAKE-137 --- lib/reactions/bootstrap.dart | 2 +- lib/reactions/on_current_fiat_change.dart | 10 +++++----- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/lib/reactions/bootstrap.dart b/lib/reactions/bootstrap.dart index fef73c46f..cfa6bf32c 100644 --- a/lib/reactions/bootstrap.dart +++ b/lib/reactions/bootstrap.dart @@ -31,6 +31,6 @@ Future bootstrap(GlobalKey navigatorKey) async { startAuthenticationStateChange(authenticationStore, navigatorKey); startCurrentWalletChangeReaction( appStore, settingsStore, fiatConversionStore); - startCurrentFiatChangeReaction(appStore, settingsStore); + startCurrentFiatChangeReaction(appStore, settingsStore, fiatConversionStore); startOnCurrentNodeChangeReaction(appStore); } diff --git a/lib/reactions/on_current_fiat_change.dart b/lib/reactions/on_current_fiat_change.dart index 50207b748..794323dc5 100644 --- a/lib/reactions/on_current_fiat_change.dart +++ b/lib/reactions/on_current_fiat_change.dart @@ -1,18 +1,18 @@ import 'package:mobx/mobx.dart'; +import 'package:cake_wallet/core/fiat_conversion_service.dart'; +import 'package:cake_wallet/store/dashboard/fiat_conversion_store.dart'; import 'package:cake_wallet/store/settings_store.dart'; import 'package:cake_wallet/store/app_store.dart'; import 'package:cake_wallet/entities/fiat_currency.dart'; ReactionDisposer _onCurrentFiatCurrencyChangeDisposer; -void startCurrentFiatChangeReaction(AppStore appStore, SettingsStore settingsStore) { +void startCurrentFiatChangeReaction(AppStore appStore, SettingsStore settingsStore, FiatConversionStore fiatConversionStore) { _onCurrentFiatCurrencyChangeDisposer?.reaction?.dispose(); _onCurrentFiatCurrencyChangeDisposer = reaction( (_) => settingsStore.fiatCurrency, (FiatCurrency fiatCurrency) async { final cryptoCurrency = appStore.wallet.currency; - // final price = await fiatConvertationService.getPrice( - // crypto: cryptoCurrency, fiat: fiatCurrency); - // - // fiatConvertationStore.setPrice(price); + fiatConversionStore.price = await FiatConversionService.fetchPrice( + cryptoCurrency, settingsStore.fiatCurrency); }); } \ No newline at end of file From 9f498f30a283d0a7096fb23827f1eda0dea6f48c Mon Sep 17 00:00:00 2001 From: M Date: Fri, 30 Oct 2020 18:32:21 +0200 Subject: [PATCH 14/58] CAKE-134. CAKE-139. FIXES. --- lib/di.dart | 4 +- .../exchange/widgets/currency_picker.dart | 1 + .../exchange_trade/exchange_trade_page.dart | 206 +++++++---- lib/src/screens/send/send_page.dart | 12 +- lib/src/screens/send/send_template_page.dart | 338 ++++++++++-------- .../trade_details/trade_details_page.dart | 10 +- .../exchange/exchange_trade_view_model.dart | 16 +- lib/view_model/send/send_view_model.dart | 4 +- 8 files changed, 357 insertions(+), 234 deletions(-) diff --git a/lib/di.dart b/lib/di.dart index 26d291cfd..15a47f04b 100644 --- a/lib/di.dart +++ b/lib/di.dart @@ -1,3 +1,4 @@ + import 'package:cake_wallet/bitcoin/bitcoin_wallet_service.dart'; import 'package:cake_wallet/core/wallet_service.dart'; import 'package:cake_wallet/entities/biometric_auth.dart'; @@ -332,7 +333,8 @@ Future setup( getIt.registerFactory(() => ExchangeTradeViewModel( wallet: getIt.get().wallet, trades: tradesSource, - tradesStore: getIt.get())); + tradesStore: getIt.get(), + sendViewModel: getIt.get())); getIt.registerFactory(() => ExchangePage(getIt.get())); diff --git a/lib/src/screens/exchange/widgets/currency_picker.dart b/lib/src/screens/exchange/widgets/currency_picker.dart index 8a5c2794f..e07c988b5 100644 --- a/lib/src/screens/exchange/widgets/currency_picker.dart +++ b/lib/src/screens/exchange/widgets/currency_picker.dart @@ -95,6 +95,7 @@ class CurrencyPickerState extends State { alignment: Alignment.center, children: [ GridView.count( + padding: EdgeInsets.all(0), controller: controller, crossAxisCount: crossAxisCount, childAspectRatio: 1.25, diff --git a/lib/src/screens/exchange_trade/exchange_trade_page.dart b/lib/src/screens/exchange_trade/exchange_trade_page.dart index 15c1a8a77..aced6304a 100644 --- a/lib/src/screens/exchange_trade/exchange_trade_page.dart +++ b/lib/src/screens/exchange_trade/exchange_trade_page.dart @@ -1,31 +1,26 @@ -import 'package:cake_wallet/palette.dart'; -import 'package:cake_wallet/entities/crypto_currency.dart'; -import 'package:cake_wallet/exchange/exchange_provider_description.dart'; -import 'package:cake_wallet/src/screens/exchange_trade/exchange_trade_item.dart'; -import 'package:cake_wallet/src/screens/exchange_trade/information_page.dart'; -import 'package:cake_wallet/src/widgets/standart_list_row.dart'; -import 'package:cake_wallet/utils/show_bar.dart'; -import 'package:cake_wallet/utils/show_pop_up.dart'; -import 'package:cake_wallet/view_model/exchange/exchange_trade_view_model.dart'; +import 'dart:ui'; import 'package:mobx/mobx.dart'; -import 'package:provider/provider.dart'; import 'package:flutter_mobx/flutter_mobx.dart'; import 'package:flutter/material.dart'; import 'package:flutter/cupertino.dart'; import 'package:flutter/services.dart'; import 'package:cake_wallet/generated/i18n.dart'; - -// import 'package:cake_wallet/src/stores/exchange_trade/exchange_trade_store.dart'; -// import 'package:cake_wallet/src/stores/send/send_store.dart'; -// import 'package:cake_wallet/src/stores/send/sending_state.dart'; -// import 'package:cake_wallet/src/stores/wallet/wallet_store.dart'; +import 'package:cake_wallet/core/execution_state.dart'; +import 'package:cake_wallet/entities/crypto_currency.dart'; +import 'package:cake_wallet/exchange/exchange_provider_description.dart'; +import 'package:cake_wallet/src/screens/exchange_trade/information_page.dart'; +import 'package:cake_wallet/src/screens/send/widgets/confirm_sending_alert.dart'; +import 'package:cake_wallet/src/widgets/standart_list_row.dart'; +import 'package:cake_wallet/utils/show_bar.dart'; +import 'package:cake_wallet/utils/show_pop_up.dart'; +import 'package:cake_wallet/view_model/exchange/exchange_trade_view_model.dart'; +import 'package:cake_wallet/view_model/send/send_view_model_state.dart'; import 'package:cake_wallet/src/screens/receive/widgets/qr_image.dart'; import 'package:cake_wallet/src/screens/base_page.dart'; import 'package:cake_wallet/src/screens/exchange_trade/widgets/timer_widget.dart'; import 'package:cake_wallet/src/widgets/primary_button.dart'; import 'package:cake_wallet/src/widgets/scollable_with_bottom_section.dart'; import 'package:cake_wallet/src/widgets/alert_with_one_action.dart'; -import 'package:cake_wallet/src/widgets/alert_with_two_actions.dart'; void showInformation( ExchangeTradeViewModel exchangeTradeViewModel, BuildContext context) { @@ -110,7 +105,7 @@ class ExchangeTradeState extends State { width: 16, color: Theme.of(context).primaryTextTheme.overline.color); - //_setEffects(context); + _setEffects(context); return Container( child: ScrollableWithBottomSection( @@ -227,44 +222,25 @@ class ExchangeTradeState extends State { ); }), bottomSectionPadding: EdgeInsets.fromLTRB(24, 0, 24, 24), - bottomSection: - /*Observer( - builder: (_) => tradeStore.trade.from == CryptoCurrency.xmr && - !(sendStore.state is TransactionCommitted) - ? LoadingPrimaryButton( - isDisabled: tradeStore.trade.inputAddress == null || - tradeStore.trade.inputAddress.isEmpty, - isLoading: sendStore.state is CreatingTransaction || - sendStore.state is TransactionCommitted, - onPressed: () => sendStore.createTransaction( - address: tradeStore.trade.inputAddress, - amount: tradeStore.trade.amount), - text: tradeStore.trade.provider == - ExchangeProviderDescription.xmrto - ? S.of(context).confirm - : S.of(context).send_xmr, - color: Colors.blue, - textColor: Colors.white) - : Offstage()),*/ - Observer( - builder: (_) { - final trade = widget.exchangeTradeViewModel.trade; + bottomSection: Observer(builder: (_) { + final trade = widget.exchangeTradeViewModel.trade; + final sendingState = + widget.exchangeTradeViewModel.sendViewModel.state; - return trade.from == CryptoCurrency.xmr - ? LoadingPrimaryButton( + return trade.from == CryptoCurrency.xmr && !(sendingState is TransactionCommitted) + ? LoadingPrimaryButton( isDisabled: trade.inputAddress == null || trade.inputAddress.isEmpty, - isLoading: false, // FIXME - onPressed: () {}, // FIXME - text: trade.provider == - ExchangeProviderDescription.xmrto + isLoading: sendingState is IsExecutingState, + onPressed: () => + widget.exchangeTradeViewModel.confirmSending(), + text: trade.provider == ExchangeProviderDescription.xmrto ? S.of(context).confirm : S.of(context).send_xmr, color: Theme.of(context).accentTextTheme.body2.color, textColor: Colors.white) - : Offstage(); - }) - ), + : Offstage(); + })), ); } @@ -273,10 +249,9 @@ class ExchangeTradeState extends State { return; } - /*final sendStore = Provider.of(context); - - reaction((_) => sendStore.state, (SendingState state) { - if (state is SendingFailed) { + reaction((_) => this.widget.exchangeTradeViewModel.sendViewModel.state, + (ExecutionState state) { + if (state is FailureState) { WidgetsBinding.instance.addPostFrameCallback((_) { showPopUp( context: context, @@ -285,30 +260,126 @@ class ExchangeTradeState extends State { alertTitle: S.of(context).error, alertContent: state.error, buttonText: S.of(context).ok, - buttonAction: () => Navigator.of(context).pop() - ); + buttonAction: () => Navigator.of(context).pop()); }); }); } - if (state is TransactionCreatedSuccessfully) { + if (state is ExecutedSuccessfullyState) { WidgetsBinding.instance.addPostFrameCallback((_) { showPopUp( context: context, builder: (BuildContext context) { - return AlertWithTwoActions( + return ConfirmSendingAlert( alertTitle: S.of(context).confirm_sending, - alertContent: S.of(context).commit_transaction_amount_fee( - sendStore.pendingTransaction.amount, - sendStore.pendingTransaction.fee), - leftButtonText: S.of(context).ok, - rightButtonText: S.of(context).cancel, - actionLeftButton: () { + amount: S.of(context).send_amount, + amountValue: widget.exchangeTradeViewModel.sendViewModel + .pendingTransaction.amountFormatted, + fee: S.of(context).send_fee, + feeValue: widget.exchangeTradeViewModel.sendViewModel + .pendingTransaction.feeFormatted, + rightButtonText: S.of(context).ok, + leftButtonText: S.of(context).cancel, + actionRightButton: () { Navigator.of(context).pop(); - sendStore.commitTransaction(); + widget.exchangeTradeViewModel.sendViewModel + .commitTransaction(); + showPopUp( + context: context, + builder: (BuildContext context) { + return Observer(builder: (_) { + final state = widget + .exchangeTradeViewModel.sendViewModel.state; + + if (state is TransactionCommitted) { + return Stack( + children: [ + Container( + color: Theme.of(context).backgroundColor, + child: Center( + child: Image.asset( + 'assets/images/birthday_cake.png'), + ), + ), + Center( + child: Padding( + padding: EdgeInsets.only( + top: 220, left: 24, right: 24), + child: Text( + S.of(context).send_success, + textAlign: TextAlign.center, + style: TextStyle( + fontSize: 22, + fontWeight: FontWeight.bold, + color: Theme.of(context) + .primaryTextTheme + .title + .color, + decoration: TextDecoration.none, + ), + ), + ), + ), + Positioned( + left: 24, + right: 24, + bottom: 24, + child: PrimaryButton( + onPressed: () => + Navigator.of(context).pop(), + text: S.of(context).send_got_it, + color: Theme.of(context) + .accentTextTheme + .body2 + .color, + textColor: Colors.white)) + ], + ); + } + + return Stack( + children: [ + Container( + color: Theme.of(context).backgroundColor, + child: Center( + child: Image.asset( + 'assets/images/birthday_cake.png'), + ), + ), + BackdropFilter( + filter: ImageFilter.blur( + sigmaX: 3.0, sigmaY: 3.0), + child: Container( + decoration: BoxDecoration( + color: Theme.of(context) + .backgroundColor + .withOpacity(0.25)), + child: Center( + child: Padding( + padding: EdgeInsets.only(top: 220), + child: Text( + S.of(context).send_sending, + textAlign: TextAlign.center, + style: TextStyle( + fontSize: 22, + fontWeight: FontWeight.bold, + color: Theme.of(context) + .primaryTextTheme + .title + .color, + decoration: TextDecoration.none, + ), + ), + ), + ), + ), + ) + ], + ); + }); + }); }, - actionRightButton: () => Navigator.of(context).pop() - ); + actionLeftButton: () => Navigator.of(context).pop()); }); }); } @@ -322,12 +393,11 @@ class ExchangeTradeState extends State { alertTitle: S.of(context).sending, alertContent: S.of(context).transaction_sent, buttonText: S.of(context).ok, - buttonAction: () => Navigator.of(context).pop() - ); + buttonAction: () => Navigator.of(context).pop()); }); }); } - });*/ + }); _effectsInstalled = true; } diff --git a/lib/src/screens/send/send_page.dart b/lib/src/screens/send/send_page.dart index 459e435d5..5cdb4b092 100644 --- a/lib/src/screens/send/send_page.dart +++ b/lib/src/screens/send/send_page.dart @@ -483,8 +483,16 @@ class SendPage extends BasePage { } }, text: S.of(context).send, - color: Theme.of(context).accentTextTheme.body2.color, - textColor: Colors.white, + color: Theme + .of(context) + .accentTextTheme + .subtitle + .decorationColor, + textColor: Theme + .of(context) + .accentTextTheme + .headline + .decorationColor, isLoading: sendViewModel.state is IsExecutingState || sendViewModel.state is TransactionCommitting, isDisabled: diff --git a/lib/src/screens/send/send_template_page.dart b/lib/src/screens/send/send_template_page.dart index 37708fcb2..b53117309 100644 --- a/lib/src/screens/send/send_template_page.dart +++ b/lib/src/screens/send/send_template_page.dart @@ -1,15 +1,17 @@ -import 'package:cake_wallet/src/widgets/address_text_field.dart'; -import 'package:cake_wallet/src/widgets/base_text_form_field.dart'; -import 'package:cake_wallet/src/widgets/primary_button.dart'; -import 'package:cake_wallet/src/widgets/scollable_with_bottom_section.dart'; +import 'package:mobx/mobx.dart'; import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; +import 'package:flutter/services.dart'; +import 'package:flutter_mobx/flutter_mobx.dart'; +import 'package:keyboard_actions/keyboard_actions.dart'; import 'package:cake_wallet/src/screens/base_page.dart'; import 'package:cake_wallet/generated/i18n.dart'; import 'package:cake_wallet/view_model/send/send_view_model.dart'; -import 'package:flutter/services.dart'; -import 'package:flutter_mobx/flutter_mobx.dart'; -import 'package:mobx/mobx.dart'; +import 'package:cake_wallet/src/widgets/address_text_field.dart'; +import 'package:cake_wallet/src/widgets/base_text_form_field.dart'; +import 'package:cake_wallet/src/widgets/keyboard_done_button.dart'; +import 'package:cake_wallet/src/widgets/primary_button.dart'; +import 'package:cake_wallet/src/widgets/scollable_with_bottom_section.dart'; class SendTemplatePage extends BasePage { SendTemplatePage({@required this.sendViewModel}); @@ -20,6 +22,8 @@ class SendTemplatePage extends BasePage { final _fiatAmountController = TextEditingController(); final _nameController = TextEditingController(); final _formKey = GlobalKey(); + final FocusNode _cryptoAmountFocus = FocusNode(); + final FocusNode _fiatAmountFocus = FocusNode(); bool _effectsInstalled = false; @@ -42,94 +46,153 @@ class SendTemplatePage extends BasePage { Widget body(BuildContext context) { _setEffects(context); - return Container( - color: Theme.of(context).backgroundColor, - child: ScrollableWithBottomSection( - contentPadding: EdgeInsets.only(bottom: 24), - content: Container( - decoration: BoxDecoration( - borderRadius: BorderRadius.only( - bottomLeft: Radius.circular(24), - bottomRight: Radius.circular(24) - ), - gradient: LinearGradient(colors: [ - Theme.of(context).primaryTextTheme.subhead.color, - Theme.of(context).primaryTextTheme.subhead.decorationColor, - ], begin: Alignment.topLeft, end: Alignment.bottomRight), - ), - child: Form( - key: _formKey, - child: Column(children: [ - Padding( - padding: EdgeInsets.fromLTRB(24, 90, 24, 32), - child: Column( - children: [ - BaseTextFormField( - controller: _nameController, - hintText: S.of(context).send_name, - borderColor: Theme.of(context) - .primaryTextTheme - .headline - .color, - textStyle: TextStyle( - fontSize: 14, - fontWeight: FontWeight.w500, - color: Colors.white), - placeholderTextStyle: TextStyle( - color: Theme.of(context) - .primaryTextTheme - .headline - .decorationColor, - fontWeight: FontWeight.w500, - fontSize: 14), - validator: sendViewModel.templateValidator, - ), - Padding( - padding: EdgeInsets.only(top: 20), - child: AddressTextField( - controller: _addressController, - onURIScanned: (uri) { - var address = ''; - var amount = ''; + return KeyboardActions( + config: KeyboardActionsConfig( + keyboardActionsPlatform: KeyboardActionsPlatform.IOS, + keyboardBarColor: isDarkTheme + ? Color.fromRGBO(48, 51, 60, 1.0) + : Color.fromRGBO(98, 98, 98, 1.0), + nextFocus: false, + actions: [ + KeyboardActionsItem( + focusNode: _cryptoAmountFocus, + toolbarButtons: [(_) => KeyboardDoneButton()], + ), + KeyboardActionsItem( + focusNode: _fiatAmountFocus, + toolbarButtons: [(_) => KeyboardDoneButton()], + ) + ]), + child: Container( + height: 0, + color: Theme.of(context).backgroundColor, + child: ScrollableWithBottomSection( + contentPadding: EdgeInsets.only(bottom: 24), + content: Container( + decoration: BoxDecoration( + borderRadius: BorderRadius.only( + bottomLeft: Radius.circular(24), + bottomRight: Radius.circular(24)), + gradient: LinearGradient(colors: [ + Theme.of(context).primaryTextTheme.subhead.color, + Theme.of(context).primaryTextTheme.subhead.decorationColor, + ], begin: Alignment.topLeft, end: Alignment.bottomRight), + ), + child: Form( + key: _formKey, + child: Column(children: [ + Padding( + padding: EdgeInsets.fromLTRB(24, 90, 24, 32), + child: Column( + children: [ + BaseTextFormField( + controller: _nameController, + hintText: S.of(context).send_name, + borderColor: + Theme.of(context).primaryTextTheme.headline.color, + textStyle: TextStyle( + fontSize: 14, + fontWeight: FontWeight.w500, + color: Colors.white), + placeholderTextStyle: TextStyle( + color: Theme.of(context) + .primaryTextTheme + .headline + .decorationColor, + fontWeight: FontWeight.w500, + fontSize: 14), + validator: sendViewModel.templateValidator, + ), + Padding( + padding: EdgeInsets.only(top: 20), + child: AddressTextField( + controller: _addressController, + onURIScanned: (uri) { + var address = ''; + var amount = ''; - if (uri != null) { - address = uri.path; - amount = uri.queryParameters['tx_amount']; - } else { - address = uri.toString(); - } + if (uri != null) { + address = uri.path; + amount = uri.queryParameters['tx_amount']; + } else { + address = uri.toString(); + } - _addressController.text = address; - _cryptoAmountController.text = amount; - }, - options: [ - AddressTextFieldOption.paste, - AddressTextFieldOption.qrCode, - AddressTextFieldOption.addressBook - ], - buttonColor: - Theme.of(context).primaryTextTheme.display1.color, - borderColor: - Theme.of(context).primaryTextTheme.headline.color, - textStyle: TextStyle( - fontSize: 14, - fontWeight: FontWeight.w500, - color: Colors.white), - hintStyle: TextStyle( - fontSize: 14, - fontWeight: FontWeight.w500, - color: Theme.of(context) + _addressController.text = address; + _cryptoAmountController.text = amount; + }, + options: [ + AddressTextFieldOption.paste, + AddressTextFieldOption.qrCode, + AddressTextFieldOption.addressBook + ], + buttonColor: Theme.of(context) + .primaryTextTheme + .display1 + .color, + borderColor: Theme.of(context) .primaryTextTheme .headline - .decorationColor), - validator: sendViewModel.addressValidator, - ), - ), - Observer(builder: (_) { - return Padding( - padding: const EdgeInsets.only(top: 20), - child: BaseTextFormField( - controller: _cryptoAmountController, + .color, + textStyle: TextStyle( + fontSize: 14, + fontWeight: FontWeight.w500, + color: Colors.white), + hintStyle: TextStyle( + fontSize: 14, + fontWeight: FontWeight.w500, + color: Theme.of(context) + .primaryTextTheme + .headline + .decorationColor), + validator: sendViewModel.addressValidator, + ), + ), + Observer(builder: (_) { + return Padding( + padding: const EdgeInsets.only(top: 20), + child: BaseTextFormField( + focusNode: _cryptoAmountFocus, + controller: _cryptoAmountController, + keyboardType: TextInputType.numberWithOptions( + signed: false, decimal: true), + inputFormatters: [ + BlacklistingTextInputFormatter( + RegExp('[\\-|\\ ]')) + ], + prefixIcon: Padding( + padding: EdgeInsets.only(top: 9), + child: + Text(sendViewModel.currency.title + ':', + style: TextStyle( + fontSize: 16, + fontWeight: FontWeight.w600, + color: Colors.white, + )), + ), + hintText: '0.0000', + borderColor: Theme.of(context) + .primaryTextTheme + .headline + .color, + textStyle: TextStyle( + fontSize: 14, + fontWeight: FontWeight.w500, + color: Colors.white), + placeholderTextStyle: TextStyle( + color: Theme.of(context) + .primaryTextTheme + .headline + .decorationColor, + fontWeight: FontWeight.w500, + fontSize: 14), + validator: sendViewModel.amountValidator)); + }), + Padding( + padding: const EdgeInsets.only(top: 20), + child: BaseTextFormField( + focusNode: _fiatAmountFocus, + controller: _fiatAmountController, keyboardType: TextInputType.numberWithOptions( signed: false, decimal: true), inputFormatters: [ @@ -138,15 +201,14 @@ class SendTemplatePage extends BasePage { ], prefixIcon: Padding( padding: EdgeInsets.only(top: 9), - child: - Text(sendViewModel.currency.title + ':', + child: Text(sendViewModel.fiat.title + ':', style: TextStyle( fontSize: 16, fontWeight: FontWeight.w600, color: Colors.white, )), ), - hintText: '0.0000', + hintText: '0.00', borderColor: Theme.of(context) .primaryTextTheme .headline @@ -162,68 +224,34 @@ class SendTemplatePage extends BasePage { .decorationColor, fontWeight: FontWeight.w500, fontSize: 14), - validator: sendViewModel.amountValidator)); - }), - Padding( - padding: const EdgeInsets.only(top: 20), - child: BaseTextFormField( - controller: _fiatAmountController, - keyboardType: TextInputType.numberWithOptions( - signed: false, decimal: true), - inputFormatters: [ - BlacklistingTextInputFormatter( - RegExp('[\\-|\\ ]')) - ], - prefixIcon: Padding( - padding: EdgeInsets.only(top: 9), - child: Text(sendViewModel.fiat.title + ':', - style: TextStyle( - fontSize: 16, - fontWeight: FontWeight.w600, - color: Colors.white, - )), - ), - hintText: '0.00', - borderColor: Theme.of(context) - .primaryTextTheme - .headline - .color, - textStyle: TextStyle( - fontSize: 14, - fontWeight: FontWeight.w500, - color: Colors.white), - placeholderTextStyle: TextStyle( - color: Theme.of(context) - .primaryTextTheme - .headline - .decorationColor, - fontWeight: FontWeight.w500, - fontSize: 14), - )), - ], - ), - ) - ]), + )), + ], + ), + ) + ]), + ), + ), + bottomSectionPadding: + EdgeInsets.only(left: 24, right: 24, bottom: 24), + bottomSection: PrimaryButton( + onPressed: () { + if (_formKey.currentState.validate()) { + sendViewModel.addTemplate( + name: _nameController.text, + address: _addressController.text, + cryptoCurrency: sendViewModel.currency.title, + amount: _cryptoAmountController.text); + sendViewModel.updateTemplate(); + Navigator.of(context).pop(); + } + }, + text: S.of(context).save, + color: Theme.of(context).accentTextTheme.subtitle.decorationColor, + textColor: + Theme.of(context).accentTextTheme.headline.decorationColor, + ), ), - ), - bottomSectionPadding: EdgeInsets.only(left: 24, right: 24, bottom: 24), - bottomSection: PrimaryButton( - onPressed: () { - if (_formKey.currentState.validate()) { - sendViewModel.addTemplate( - name: _nameController.text, - address: _addressController.text, - cryptoCurrency: sendViewModel.currency.title, - amount: _cryptoAmountController.text); - sendViewModel.updateTemplate(); - Navigator.of(context).pop(); - } - }, - text: S.of(context).save, - color: Colors.green, - textColor: Colors.white), - ), - ); + )); } void _setEffects(BuildContext context) { diff --git a/lib/src/screens/trade_details/trade_details_page.dart b/lib/src/screens/trade_details/trade_details_page.dart index 88e30bae9..30b29d115 100644 --- a/lib/src/screens/trade_details/trade_details_page.dart +++ b/lib/src/screens/trade_details/trade_details_page.dart @@ -13,29 +13,29 @@ import 'package:cake_wallet/src/widgets/standart_list_row.dart'; class TradeDetailsPage extends BasePage { TradeDetailsPage(this.trade) : _items = [] { final dateFormat = DateFormatter.withCurrentLocal(); - final items = [ + _items.addAll([ StandartListItem(title: S.current.trade_details_id, value: trade.id), StandartListItem( title: S.current.trade_details_state, value: trade.state != null ? trade.state.toString() : S.current.trade_details_fetching) - ]; + ]); if (trade.provider != null) { - items.add(StandartListItem( + _items.add(StandartListItem( title: S.current.trade_details_provider, value: trade.provider.toString())); } if (trade.createdAt != null) { - items.add(StandartListItem( + _items.add(StandartListItem( title: S.current.trade_details_created_at, value: dateFormat.format(trade.createdAt).toString())); } if (trade.from != null && trade.to != null) { - items.add(StandartListItem( + _items.add(StandartListItem( title: S.current.trade_details_pair, value: '${trade.from.toString()} → ${trade.to.toString()}')); } diff --git a/lib/view_model/exchange/exchange_trade_view_model.dart b/lib/view_model/exchange/exchange_trade_view_model.dart index 43490866e..dedb2c559 100644 --- a/lib/view_model/exchange/exchange_trade_view_model.dart +++ b/lib/view_model/exchange/exchange_trade_view_model.dart @@ -7,6 +7,7 @@ import 'package:cake_wallet/exchange/morphtoken/morphtoken_exchange_provider.dar import 'package:cake_wallet/exchange/trade.dart'; import 'package:cake_wallet/exchange/xmrto/xmrto_exchange_provider.dart'; import 'package:cake_wallet/store/dashboard/trades_store.dart'; +import 'package:cake_wallet/view_model/send/send_view_model.dart'; import 'package:hive/hive.dart'; import 'package:mobx/mobx.dart'; import 'package:cake_wallet/src/screens/exchange_trade/exchange_trade_item.dart'; @@ -18,7 +19,8 @@ class ExchangeTradeViewModel = ExchangeTradeViewModelBase with _$ExchangeTradeViewModel; abstract class ExchangeTradeViewModelBase with Store { - ExchangeTradeViewModelBase({this.wallet, this.trades, this.tradesStore}) { + ExchangeTradeViewModelBase( + {this.wallet, this.trades, this.tradesStore, this.sendViewModel}) { trade = tradesStore.trade; isSendable = trade.from == wallet.currency || @@ -57,6 +59,7 @@ abstract class ExchangeTradeViewModelBase with Store { final WalletBase wallet; final Box trades; final TradesStore tradesStore; + final SendViewModel sendViewModel; @observable Trade trade; @@ -71,6 +74,17 @@ abstract class ExchangeTradeViewModelBase with Store { Timer _timer; + @action + Future confirmSending() async { + if (!isSendable) { + return; + } + + sendViewModel.address = trade.inputAddress; + sendViewModel.setCryptoAmount(trade.amount); + await sendViewModel.createTransaction(); + } + @action Future _updateTrade() async { try { diff --git a/lib/view_model/send/send_view_model.dart b/lib/view_model/send/send_view_model.dart index d49be63f7..32076d365 100644 --- a/lib/view_model/send/send_view_model.dart +++ b/lib/view_model/send/send_view_model.dart @@ -1,8 +1,8 @@ +import 'package:intl/intl.dart'; +import 'package:mobx/mobx.dart'; import 'package:cake_wallet/entities/openalias_record.dart'; import 'package:cake_wallet/entities/template.dart'; import 'package:cake_wallet/store/templates/send_template_store.dart'; -import 'package:intl/intl.dart'; -import 'package:mobx/mobx.dart'; import 'package:cake_wallet/core/template_validator.dart'; import 'package:cake_wallet/core/address_validator.dart'; import 'package:cake_wallet/core/amount_validator.dart'; From 0473d342f3715cf0a09cd17623c49df67dca29c0 Mon Sep 17 00:00:00 2001 From: Oleksandr Sobol Date: Fri, 30 Oct 2020 18:40:42 +0200 Subject: [PATCH 15/58] CAKE-133 | added localization to change current wallet alert, to create new wallet popup, to seed alert --- lib/generated/i18n.dart | 184 ++++++++++++++++++ lib/src/screens/seed/wallet_seed_page.dart | 10 +- .../screens/wallet_list/wallet_list_page.dart | 10 +- res/values/strings_de.arb | 13 +- res/values/strings_en.arb | 13 +- res/values/strings_es.arb | 13 +- res/values/strings_hi.arb | 13 +- res/values/strings_ja.arb | 13 +- res/values/strings_ko.arb | 13 +- res/values/strings_nl.arb | 13 +- res/values/strings_pl.arb | 13 +- res/values/strings_pt.arb | 13 +- res/values/strings_ru.arb | 13 +- res/values/strings_uk.arb | 13 +- res/values/strings_zh.arb | 13 +- 15 files changed, 336 insertions(+), 24 deletions(-) diff --git a/lib/generated/i18n.dart b/lib/generated/i18n.dart index 17de0647c..09afd8e14 100644 --- a/lib/generated/i18n.dart +++ b/lib/generated/i18n.dart @@ -52,6 +52,7 @@ class S implements WidgetsLocalizations { String get change_currency => "Change Currency"; String get change_exchange_provider => "Change Exchange Provider"; String get change_language => "Change language"; + String get change_wallet_alert_title => "Change current wallet"; String get choose_account => "Choose account"; String get choose_wallet_currency => "Please choose wallet currency:"; String get clear => "Clear"; @@ -68,6 +69,7 @@ class S implements WidgetsLocalizations { String get copy_id => "Copy ID"; String get create_new => "Create New Wallet"; String get create_new_account => "Create new account"; + String get creating_new_wallet => "Creating new wallet"; String get delete => "Delete"; String get digit_pin => "-digit PIN"; String get edit => "Edit"; @@ -173,6 +175,10 @@ class S implements WidgetsLocalizations { String get save => "Save"; String get saved_the_trade_id => "I've saved the trade ID"; String get scan_qr_code => "Scan the QR code to get the address"; + String get seed_alert_back => "Go back"; + String get seed_alert_content => "The seed is the only way to recover your wallet. Have you written it down?"; + String get seed_alert_title => "Attention"; + String get seed_alert_yes => "Yes, I have"; String get seed_choose => "Choose seed language"; String get seed_language_chinese => "Chinese"; String get seed_language_choose => "Please choose seed language:"; @@ -316,8 +322,10 @@ class S implements WidgetsLocalizations { String Blocks_remaining(String status) => "${status} Blocks Remaining"; String change_current_node(String node) => "Are you sure to change current node to ${node}?"; String change_language_to(String language) => "Change language to ${language}?"; + String change_wallet_alert_content(String wallet_name) => "Do you want to change current wallet to ${wallet_name}?"; String commit_transaction_amount_fee(String amount, String fee) => "Commit transaction\nAmount: ${amount}\nFee: ${fee}"; String copied_key_to_clipboard(String key) => "Copied ${key} to Clipboard"; + String creating_new_wallet_error(String description) => "Error: ${description}"; String error_text_limits_loading_failed(String provider) => "Trade for ${provider} is not created. Limits loading failed"; String error_text_maximum_limit(String provider, String max, String currency) => "Trade for ${provider} is not created. Amount is more then maximum: ${max} ${currency}"; String error_text_minimal_limit(String provider, String min, String currency) => "Trade for ${provider} is not created. Amount is less then minimal: ${min} ${currency}"; @@ -361,6 +369,8 @@ class $de extends S { @override String get new_subaddress_create => "Erstellen"; @override + String get seed_alert_back => "Geh zurück"; + @override String get restore_view_key_private => "Schlüssel anzeigen(geheim)"; @override String get transaction_priority_fast => "Schnell"; @@ -487,6 +497,8 @@ class $de extends S { @override String get settings_display_balance_as => "Kontostand anzeigen als"; @override + String get change_wallet_alert_title => "Ändern Sie die aktuelle Brieftasche"; + @override String get placeholder_transactions => "Ihre Transaktionen werden hier angezeigt"; @override String get trade_details_provider => "Anbieter"; @@ -497,6 +509,8 @@ class $de extends S { @override String get seed_language_german => "Deutsche"; @override + String get seed_alert_title => "Beachtung"; + @override String get create_new => "Neue Wallet erstellen"; @override String get trade_details_fetching => "Holen"; @@ -531,6 +545,8 @@ class $de extends S { @override String get remove_node => "Knoten entfernen"; @override + String get seed_alert_content => "Der Samen ist der einzige Weg, um Ihren Geldbeutel wiederzugewinnen. Hast du es aufgeschrieben?"; + @override String get trade_state_paid_unconfirmed => "Unbestätigt bezahlt"; @override String get please_select => "Bitte auswählen:"; @@ -583,6 +599,8 @@ class $de extends S { @override String get wallet_seed => "Brieftaschensamen"; @override + String get creating_new_wallet => "Neue Brieftasche erstellen"; + @override String get yesterday => "Gestern"; @override String get send_amount => "Menge:"; @@ -915,6 +933,8 @@ class $de extends S { @override String get enter_your_pin => "PIN eingeben"; @override + String get seed_alert_yes => "Ja, habe ich"; + @override String get wallet_list_restore_wallet => "Wallet wiederherstellen"; @override String get restore_title_from_seed => "Aus Seed wiederherstellen"; @@ -961,10 +981,14 @@ class $de extends S { @override String trade_is_powered_by(String provider) => "Dieser Handel wird betrieben von ${provider}"; @override + String change_wallet_alert_content(String wallet_name) => "Möchten Sie die aktuelle Brieftasche in ändern ${wallet_name}?"; + @override String time(String minutes, String seconds) => "${minutes}m ${seconds}s"; @override String max_value(String value, String currency) => "Max: ${value} ${currency}"; @override + String creating_new_wallet_error(String description) => "Error: ${description}"; + @override String error_text_maximum_limit(String provider, String max, String currency) => "Handel für ${provider} wird nicht erstellt. Menge ist mehr als maximal: ${max} ${currency}"; @override String send_address(String cryptoCurrency) => "${cryptoCurrency}-Adresse"; @@ -1011,6 +1035,8 @@ class $hi extends S { @override String get new_subaddress_create => "सर्जन करना"; @override + String get seed_alert_back => "वापस जाओ"; + @override String get restore_view_key_private => "कुंजी देखें (निजी)"; @override String get transaction_priority_fast => "उपवास"; @@ -1137,6 +1163,8 @@ class $hi extends S { @override String get settings_display_balance_as => "के रूप में संतुलन प्रदर्शित करें"; @override + String get change_wallet_alert_title => "वर्तमान बटुआ बदलें"; + @override String get placeholder_transactions => "आपके लेनदेन यहां प्रदर्शित होंगे"; @override String get trade_details_provider => "प्रदाता"; @@ -1147,6 +1175,8 @@ class $hi extends S { @override String get seed_language_german => "जर्मन"; @override + String get seed_alert_title => "ध्यान"; + @override String get create_new => "नया बटुआ बनाएँ"; @override String get trade_details_fetching => "ला रहा है"; @@ -1181,6 +1211,8 @@ class $hi extends S { @override String get remove_node => "नोड निकालें"; @override + String get seed_alert_content => "बीज आपके बटुए को पुनर्प्राप्त करने का एकमात्र तरीका है। क्या आपने इसे लिखा है?"; + @override String get trade_state_paid_unconfirmed => "अपुष्ट भुगतान किया"; @override String get please_select => "कृपया चुने:"; @@ -1233,6 +1265,8 @@ class $hi extends S { @override String get wallet_seed => "बटुआ का बीज"; @override + String get creating_new_wallet => "नया बटुआ बनाना"; + @override String get yesterday => "बिता कल"; @override String get send_amount => "रकम:"; @@ -1565,6 +1599,8 @@ class $hi extends S { @override String get enter_your_pin => "अपना पिन दर्ज करो"; @override + String get seed_alert_yes => "हाँ मेरे पास है"; + @override String get wallet_list_restore_wallet => "वॉलेट को पुनर्स्थापित करें"; @override String get restore_title_from_seed => "बीज से पुनर्स्थापित करें"; @@ -1611,10 +1647,14 @@ class $hi extends S { @override String trade_is_powered_by(String provider) => "यह व्यापार द्वारा संचालित है ${provider}"; @override + String change_wallet_alert_content(String wallet_name) => "क्या आप करंट वॉलेट को बदलना चाहते हैं ${wallet_name}?"; + @override String time(String minutes, String seconds) => "${minutes}m ${seconds}s"; @override String max_value(String value, String currency) => "मैक्स: ${value} ${currency}"; @override + String creating_new_wallet_error(String description) => "त्रुटि: ${description}"; + @override String error_text_maximum_limit(String provider, String max, String currency) => "व्यापार ${provider} के लिए नहीं बनाया गया है। राशि अधिक है तो अधिकतम: ${max} ${currency}"; @override String send_address(String cryptoCurrency) => "${cryptoCurrency} पता"; @@ -1661,6 +1701,8 @@ class $ru extends S { @override String get new_subaddress_create => "Создать"; @override + String get seed_alert_back => "Назад"; + @override String get restore_view_key_private => "Приватный ключ просмотра"; @override String get transaction_priority_fast => "Быстрый"; @@ -1787,6 +1829,8 @@ class $ru extends S { @override String get settings_display_balance_as => "Отображать баланс как"; @override + String get change_wallet_alert_title => "Изменить текущий кошелек"; + @override String get placeholder_transactions => "Ваши транзакции будут отображаться здесь"; @override String get trade_details_provider => "Провайдер"; @@ -1797,6 +1841,8 @@ class $ru extends S { @override String get seed_language_german => "Немецкий"; @override + String get seed_alert_title => "Внимание"; + @override String get create_new => "Создать новый кошелёк"; @override String get trade_details_fetching => "Получение"; @@ -1831,6 +1877,8 @@ class $ru extends S { @override String get remove_node => "Удалить ноду"; @override + String get seed_alert_content => "Мнемоническая фраза - единственный способ восстановить ваш кошелек. Вы записали ее?"; + @override String get trade_state_paid_unconfirmed => "Оплата неподтверждена"; @override String get please_select => "Пожалуйста, выберите:"; @@ -1883,6 +1931,8 @@ class $ru extends S { @override String get wallet_seed => "Мнемоническая фраза кошелька"; @override + String get creating_new_wallet => "Создание нового кошелька"; + @override String get yesterday => "Вчера"; @override String get send_amount => "Сумма:"; @@ -2215,6 +2265,8 @@ class $ru extends S { @override String get enter_your_pin => "Введите ваш PIN"; @override + String get seed_alert_yes => "Да"; + @override String get wallet_list_restore_wallet => "Восстановить кошелёк"; @override String get restore_title_from_seed => "Восстановить из мнемонической фразы"; @@ -2261,10 +2313,14 @@ class $ru extends S { @override String trade_is_powered_by(String provider) => "Сделка выполнена через ${provider}"; @override + String change_wallet_alert_content(String wallet_name) => "Вы хотите изменить текущий кошелек на ${wallet_name}?"; + @override String time(String minutes, String seconds) => "${minutes}мин ${seconds}сек"; @override String max_value(String value, String currency) => "Макс: ${value} ${currency}"; @override + String creating_new_wallet_error(String description) => "Ошибка: ${description}"; + @override String error_text_maximum_limit(String provider, String max, String currency) => "Сделка для ${provider} не создана. Сумма больше максимальной: ${max} ${currency}"; @override String send_address(String cryptoCurrency) => "${cryptoCurrency} адрес"; @@ -2311,6 +2367,8 @@ class $ko extends S { @override String get new_subaddress_create => "몹시 떠들어 대다"; @override + String get seed_alert_back => "돌아 가기"; + @override String get restore_view_key_private => "키보기 (은밀한)"; @override String get transaction_priority_fast => "빠른"; @@ -2437,6 +2495,8 @@ class $ko extends S { @override String get settings_display_balance_as => "잔액 표시"; @override + String get change_wallet_alert_title => "현재 지갑 변경"; + @override String get placeholder_transactions => "거래가 여기에 표시됩니다"; @override String get trade_details_provider => "공급자"; @@ -2447,6 +2507,8 @@ class $ko extends S { @override String get seed_language_german => "독일 사람"; @override + String get seed_alert_title => "주의"; + @override String get create_new => "새 월렛 만들기"; @override String get trade_details_fetching => "가져 오는 중"; @@ -2481,6 +2543,8 @@ class $ko extends S { @override String get remove_node => "노드 제거"; @override + String get seed_alert_content => "씨앗은 지갑을 복구하는 유일한 방법입니다. 적어 보셨나요?"; + @override String get trade_state_paid_unconfirmed => "미확인 유료"; @override String get please_select => "선택 해주세요:"; @@ -2533,6 +2597,8 @@ class $ko extends S { @override String get wallet_seed => "지갑 시드"; @override + String get creating_new_wallet => "새 지갑 생성"; + @override String get yesterday => "어제"; @override String get send_amount => "양:"; @@ -2865,6 +2931,8 @@ class $ko extends S { @override String get enter_your_pin => "PIN을 입력하십시오"; @override + String get seed_alert_yes => "네, 있어요"; + @override String get wallet_list_restore_wallet => "월렛 복원"; @override String get restore_title_from_seed => "종자에서 복원"; @@ -2911,10 +2979,14 @@ class $ko extends S { @override String trade_is_powered_by(String provider) => "이 거래는 ${provider}"; @override + String change_wallet_alert_content(String wallet_name) => "현재 지갑을 다음으로 변경 하시겠습니까 ${wallet_name}?"; + @override String time(String minutes, String seconds) => "${minutes}m ${seconds}s"; @override String max_value(String value, String currency) => "맥스: ${value} ${currency}"; @override + String creating_new_wallet_error(String description) => "오류: ${description}"; + @override String error_text_maximum_limit(String provider, String max, String currency) => "거래 ${provider} 가 생성되지 않습니다. 금액이 최대 값보다 많습니다. ${max} ${currency}"; @override String send_address(String cryptoCurrency) => "${cryptoCurrency} 주소"; @@ -2961,6 +3033,8 @@ class $pt extends S { @override String get new_subaddress_create => "Criar"; @override + String get seed_alert_back => "Volte"; + @override String get restore_view_key_private => "Chave de visualização (privada)"; @override String get transaction_priority_fast => "Rápida"; @@ -3087,6 +3161,8 @@ class $pt extends S { @override String get settings_display_balance_as => "Saldo a exibir"; @override + String get change_wallet_alert_title => "Alterar carteira atual"; + @override String get placeholder_transactions => "Suas transações serão exibidas aqui"; @override String get trade_details_provider => "Provedor"; @@ -3097,6 +3173,8 @@ class $pt extends S { @override String get seed_language_german => "Alemã"; @override + String get seed_alert_title => "Atenção"; + @override String get create_new => "Criar nova carteira"; @override String get trade_details_fetching => "Buscando"; @@ -3131,6 +3209,8 @@ class $pt extends S { @override String get remove_node => "Remover nó"; @override + String get seed_alert_content => "A semente é a única forma de recuperar sua carteira. Você escreveu isso?"; + @override String get trade_state_paid_unconfirmed => "Pagamento não-confirmado"; @override String get please_select => "Escolha abaixo:"; @@ -3183,6 +3263,8 @@ class $pt extends S { @override String get wallet_seed => "Semente de carteira"; @override + String get creating_new_wallet => "Criando nova carteira"; + @override String get yesterday => "Ontem"; @override String get send_amount => "Montante:"; @@ -3515,6 +3597,8 @@ class $pt extends S { @override String get enter_your_pin => "Insira seu PIN"; @override + String get seed_alert_yes => "Sim, eu tenho"; + @override String get wallet_list_restore_wallet => "Restaurar carteira"; @override String get restore_title_from_seed => "Restaurar a partir de semente"; @@ -3561,10 +3645,14 @@ class $pt extends S { @override String trade_is_powered_by(String provider) => "Troca realizada por ${provider}"; @override + String change_wallet_alert_content(String wallet_name) => "Quer mudar a carteira atual para ${wallet_name}?"; + @override String time(String minutes, String seconds) => "${minutes}m ${seconds}s"; @override String max_value(String value, String currency) => "Máx: ${value} ${currency}"; @override + String creating_new_wallet_error(String description) => "Erro: ${description}"; + @override String error_text_maximum_limit(String provider, String max, String currency) => "A troca por ${provider} não é criada. O valor é superior ao máximo: ${max} ${currency}"; @override String send_address(String cryptoCurrency) => "Endereço ${cryptoCurrency}"; @@ -3611,6 +3699,8 @@ class $uk extends S { @override String get new_subaddress_create => "Створити"; @override + String get seed_alert_back => "Назад"; + @override String get restore_view_key_private => "Приватний ключ перегляду"; @override String get transaction_priority_fast => "Швидкий"; @@ -3737,6 +3827,8 @@ class $uk extends S { @override String get settings_display_balance_as => "Відображати баланс як"; @override + String get change_wallet_alert_title => "Змінити поточний гаманець"; + @override String get placeholder_transactions => "Тут відображатимуться ваші транзакції"; @override String get trade_details_provider => "Провайдер"; @@ -3747,6 +3839,8 @@ class $uk extends S { @override String get seed_language_german => "Німецька"; @override + String get seed_alert_title => "Увага"; + @override String get create_new => "Створити новий гаманець"; @override String get trade_details_fetching => "Отримання"; @@ -3781,6 +3875,8 @@ class $uk extends S { @override String get remove_node => "Видалити вузол"; @override + String get seed_alert_content => "Мнемонічна фраза - єдиний спосіб відновити ваш гаманець. Ви записали її?"; + @override String get trade_state_paid_unconfirmed => "Оплата непідтверджена"; @override String get please_select => "Будь ласка, виберіть:"; @@ -3833,6 +3929,8 @@ class $uk extends S { @override String get wallet_seed => "Мнемонічна фраза гаманця"; @override + String get creating_new_wallet => "Створення нового гаманця"; + @override String get yesterday => "Вчора"; @override String get send_amount => "Сума:"; @@ -4165,6 +4263,8 @@ class $uk extends S { @override String get enter_your_pin => "Введіть ваш PIN"; @override + String get seed_alert_yes => "Так"; + @override String get wallet_list_restore_wallet => "Відновити гаманець"; @override String get restore_title_from_seed => "Відновити з мнемонічної фрази"; @@ -4211,10 +4311,14 @@ class $uk extends S { @override String trade_is_powered_by(String provider) => "Операція виконана через ${provider}"; @override + String change_wallet_alert_content(String wallet_name) => "Ви хочете змінити поточний гаманець на ${wallet_name}?"; + @override String time(String minutes, String seconds) => "${minutes}хв ${seconds}сек"; @override String max_value(String value, String currency) => "Макс: ${value} ${currency}"; @override + String creating_new_wallet_error(String description) => "Помилка: ${description}"; + @override String error_text_maximum_limit(String provider, String max, String currency) => "Операція для ${provider} не створена. Сума більше максимальної: ${max} ${currency}"; @override String send_address(String cryptoCurrency) => "${cryptoCurrency} адреса"; @@ -4261,6 +4365,8 @@ class $ja extends S { @override String get new_subaddress_create => "作成する"; @override + String get seed_alert_back => "戻る"; + @override String get restore_view_key_private => "ビューキー (プライベート)"; @override String get transaction_priority_fast => "速い"; @@ -4387,6 +4493,8 @@ class $ja extends S { @override String get settings_display_balance_as => "残高を表示"; @override + String get change_wallet_alert_title => "現在のウォレットを変更する"; + @override String get placeholder_transactions => "あなたの取引はここに表示されます"; @override String get trade_details_provider => "プロバイダー"; @@ -4397,6 +4505,8 @@ class $ja extends S { @override String get seed_language_german => "ドイツ人"; @override + String get seed_alert_title => "注意"; + @override String get create_new => "新しいウォレットを作成"; @override String get trade_details_fetching => "フェッチング"; @@ -4431,6 +4541,8 @@ class $ja extends S { @override String get remove_node => "ノードを削除"; @override + String get seed_alert_content => "種子はあなたの財布を回復する唯一の方法です。 書き留めましたか?"; + @override String get trade_state_paid_unconfirmed => "未確認の支払い"; @override String get please_select => "選んでください:"; @@ -4483,6 +4595,8 @@ class $ja extends S { @override String get wallet_seed => "ウォレットシード"; @override + String get creating_new_wallet => "新しいウォレットの作成"; + @override String get yesterday => "昨日"; @override String get send_amount => "量:"; @@ -4815,6 +4929,8 @@ class $ja extends S { @override String get enter_your_pin => "PINを入力してください"; @override + String get seed_alert_yes => "はい、あります"; + @override String get wallet_list_restore_wallet => "ウォレットを復元"; @override String get restore_title_from_seed => "シードから復元"; @@ -4861,10 +4977,14 @@ class $ja extends S { @override String trade_is_powered_by(String provider) => "この取引は ${provider}"; @override + String change_wallet_alert_content(String wallet_name) => "現在のウォレットをに変更しますか ${wallet_name}?"; + @override String time(String minutes, String seconds) => "${minutes}m ${seconds}s"; @override String max_value(String value, String currency) => "マックス: ${value} ${currency}"; @override + String creating_new_wallet_error(String description) => "エラー: ${description}"; + @override String error_text_maximum_limit(String provider, String max, String currency) => "${provider} の取引は作成されません。 金額は最大値を超えています: ${max} ${currency}"; @override String send_address(String cryptoCurrency) => "${cryptoCurrency} 住所"; @@ -4915,6 +5035,8 @@ class $pl extends S { @override String get new_subaddress_create => "Stwórz"; @override + String get seed_alert_back => "Wróć"; + @override String get restore_view_key_private => "Wyświetl klucz (prywatny)"; @override String get transaction_priority_fast => "Szybki"; @@ -5041,6 +5163,8 @@ class $pl extends S { @override String get settings_display_balance_as => "Wyświetl saldo jako"; @override + String get change_wallet_alert_title => "Zmień obecny portfel"; + @override String get placeholder_transactions => "Twoje transakcje zostaną wyświetlone tutaj"; @override String get trade_details_provider => "Dostawca"; @@ -5051,6 +5175,8 @@ class $pl extends S { @override String get seed_language_german => "Niemiecki"; @override + String get seed_alert_title => "Uwaga"; + @override String get create_new => "Utwórz nowy portfel"; @override String get trade_details_fetching => "Ujmujący"; @@ -5085,6 +5211,8 @@ class $pl extends S { @override String get remove_node => "Usuń węzeł"; @override + String get seed_alert_content => "Ziarno to jedyny sposób na odzyskanie portfela. Zapisałeś to?"; + @override String get trade_state_paid_unconfirmed => "Płatne niepotwierdzone"; @override String get please_select => "Proszę wybrać:"; @@ -5137,6 +5265,8 @@ class $pl extends S { @override String get wallet_seed => "Nasiono portfela"; @override + String get creating_new_wallet => "Tworzenie nowego portfela"; + @override String get yesterday => "Wczoraj"; @override String get send_amount => "Ilość:"; @@ -5469,6 +5599,8 @@ class $pl extends S { @override String get enter_your_pin => "Wpisz Twój kod PIN"; @override + String get seed_alert_yes => "Tak"; + @override String get wallet_list_restore_wallet => "Przywróć portfel"; @override String get restore_title_from_seed => "Przywróć z nasion"; @@ -5515,10 +5647,14 @@ class $pl extends S { @override String trade_is_powered_by(String provider) => "Ten handel jest zasilany przez ${provider}"; @override + String change_wallet_alert_content(String wallet_name) => "Czy chcesz zmienić obecny portfel na ${wallet_name}?"; + @override String time(String minutes, String seconds) => "${minutes}m ${seconds}s"; @override String max_value(String value, String currency) => "Max: ${value} ${currency}"; @override + String creating_new_wallet_error(String description) => "Pomyłka: ${description}"; + @override String error_text_maximum_limit(String provider, String max, String currency) => "Wymiana dla ${provider} nie została utworzona. Kwota jest większa niż maksymalna: ${max} ${currency}"; @override String send_address(String cryptoCurrency) => "Adres ${cryptoCurrency}"; @@ -5565,6 +5701,8 @@ class $es extends S { @override String get new_subaddress_create => "Crear"; @override + String get seed_alert_back => "Regresa"; + @override String get restore_view_key_private => "View clave (privado)"; @override String get transaction_priority_fast => "Rápido"; @@ -5691,6 +5829,8 @@ class $es extends S { @override String get settings_display_balance_as => "Mostrar saldo como"; @override + String get change_wallet_alert_title => "Cambiar billetera actual"; + @override String get placeholder_transactions => "Sus transacciones se mostrarán aquí"; @override String get trade_details_provider => "Proveedor"; @@ -5701,6 +5841,8 @@ class $es extends S { @override String get seed_language_german => "Alemán"; @override + String get seed_alert_title => "Atención"; + @override String get create_new => "Crear nueva billetera"; @override String get trade_details_fetching => "Cargando"; @@ -5735,6 +5877,8 @@ class $es extends S { @override String get remove_node => "Eliminar nodo"; @override + String get seed_alert_content => "La semilla es la única forma de recuperar su billetera. ¿Lo has escrito?"; + @override String get trade_state_paid_unconfirmed => "Pagado sin confirmar"; @override String get please_select => "Por favor seleccione:"; @@ -5787,6 +5931,8 @@ class $es extends S { @override String get wallet_seed => "Semilla de billetera"; @override + String get creating_new_wallet => "Creando nueva billetera"; + @override String get yesterday => "Ayer"; @override String get send_amount => "Cantidad:"; @@ -6119,6 +6265,8 @@ class $es extends S { @override String get enter_your_pin => "Introduce tu PIN"; @override + String get seed_alert_yes => "Sí tengo"; + @override String get wallet_list_restore_wallet => "Restaurar billetera"; @override String get restore_title_from_seed => "De la semilla"; @@ -6165,10 +6313,14 @@ class $es extends S { @override String trade_is_powered_by(String provider) => "Este comercio es impulsado por ${provider}"; @override + String change_wallet_alert_content(String wallet_name) => "¿Quieres cambiar la billetera actual a ${wallet_name}?"; + @override String time(String minutes, String seconds) => "${minutes}m ${seconds}s"; @override String max_value(String value, String currency) => "Max: ${value} ${currency}"; @override + String creating_new_wallet_error(String description) => "Error: ${description}"; + @override String error_text_maximum_limit(String provider, String max, String currency) => "El comercio por ${provider} no se crea. La cantidad es más que el máximo: ${max} ${currency}"; @override String send_address(String cryptoCurrency) => "Dirección de ${cryptoCurrency}"; @@ -6215,6 +6367,8 @@ class $nl extends S { @override String get new_subaddress_create => "Creëren"; @override + String get seed_alert_back => "Ga terug"; + @override String get restore_view_key_private => "Bekijk sleutel (privaat)"; @override String get transaction_priority_fast => "Snel"; @@ -6341,6 +6495,8 @@ class $nl extends S { @override String get settings_display_balance_as => "Toon saldo als"; @override + String get change_wallet_alert_title => "Wijzig huidige portemonnee"; + @override String get placeholder_transactions => "Uw transacties worden hier weergegeven"; @override String get trade_details_provider => "Leverancier"; @@ -6351,6 +6507,8 @@ class $nl extends S { @override String get seed_language_german => "Duitse"; @override + String get seed_alert_title => "Aandacht"; + @override String get create_new => "Maak een nieuwe portemonnee"; @override String get trade_details_fetching => "Ophalen"; @@ -6385,6 +6543,8 @@ class $nl extends S { @override String get remove_node => "Knoop verwijderen"; @override + String get seed_alert_content => "Het zaad is de enige manier om uw portemonnee te herstellen. Heb je het opgeschreven?"; + @override String get trade_state_paid_unconfirmed => "Niet bevestigd"; @override String get please_select => "Selecteer alstublieft:"; @@ -6437,6 +6597,8 @@ class $nl extends S { @override String get wallet_seed => "Portemonnee zaad"; @override + String get creating_new_wallet => "Nieuwe portemonnee aanmaken"; + @override String get yesterday => "Gisteren"; @override String get send_amount => "Bedrag:"; @@ -6769,6 +6931,8 @@ class $nl extends S { @override String get enter_your_pin => "Voer uw pincode in"; @override + String get seed_alert_yes => "Ja ik heb"; + @override String get wallet_list_restore_wallet => "Portemonnee herstellen"; @override String get restore_title_from_seed => "Herstel van zaad"; @@ -6815,10 +6979,14 @@ class $nl extends S { @override String trade_is_powered_by(String provider) => "Deze transactie wordt mogelijk gemaakt door ${provider}"; @override + String change_wallet_alert_content(String wallet_name) => "Wilt u de huidige portemonnee wijzigen in ${wallet_name}?"; + @override String time(String minutes, String seconds) => "${minutes}m ${seconds}s"; @override String max_value(String value, String currency) => "Max: ${value} ${currency}"; @override + String creating_new_wallet_error(String description) => "Fout: ${description}"; + @override String error_text_maximum_limit(String provider, String max, String currency) => "Ruil voor ${provider} is niet gemaakt. Bedrag is meer dan maximaal: ${max} ${currency}"; @override String send_address(String cryptoCurrency) => "${cryptoCurrency}-adres"; @@ -6865,6 +7033,8 @@ class $zh extends S { @override String get new_subaddress_create => "创建"; @override + String get seed_alert_back => "回去"; + @override String get restore_view_key_private => "查看金钥 (私人的)"; @override String get transaction_priority_fast => "快速"; @@ -6991,6 +7161,8 @@ class $zh extends S { @override String get settings_display_balance_as => "将余额显示为"; @override + String get change_wallet_alert_title => "更換當前錢包"; + @override String get placeholder_transactions => "您的交易將顯示在這裡"; @override String get trade_details_provider => "提供者"; @@ -7001,6 +7173,8 @@ class $zh extends S { @override String get seed_language_german => "德語"; @override + String get seed_alert_title => "注意"; + @override String get create_new => "创建新钱包"; @override String get trade_details_fetching => "正在取得"; @@ -7035,6 +7209,8 @@ class $zh extends S { @override String get remove_node => "删除节点"; @override + String get seed_alert_content => "種子是恢復錢包的唯一方法。 你寫下來了嗎?"; + @override String get trade_state_paid_unconfirmed => "付费未确认"; @override String get please_select => "请选择:"; @@ -7087,6 +7263,8 @@ class $zh extends S { @override String get wallet_seed => "錢包種子"; @override + String get creating_new_wallet => "創建新錢包"; + @override String get yesterday => "昨天"; @override String get send_amount => "量:"; @@ -7419,6 +7597,8 @@ class $zh extends S { @override String get enter_your_pin => "输入密码"; @override + String get seed_alert_yes => "是的,我有"; + @override String get wallet_list_restore_wallet => "恢复钱包"; @override String get restore_title_from_seed => "从种子还原"; @@ -7465,10 +7645,14 @@ class $zh extends S { @override String trade_is_powered_by(String provider) => "该交易由 ${provider}"; @override + String change_wallet_alert_content(String wallet_name) => "您要將當前的錢包更改為 ${wallet_name}?"; + @override String time(String minutes, String seconds) => "${minutes}m ${seconds}s"; @override String max_value(String value, String currency) => "最高: ${value} ${currency}"; @override + String creating_new_wallet_error(String description) => "錯誤: ${description}"; + @override String error_text_maximum_limit(String provider, String max, String currency) => "未創建 ${provider} 交易。 金額大於最大值:${max} ${currency}"; @override String send_address(String cryptoCurrency) => "${cryptoCurrency} 地址"; diff --git a/lib/src/screens/seed/wallet_seed_page.dart b/lib/src/screens/seed/wallet_seed_page.dart index c101561e6..72c80d503 100644 --- a/lib/src/screens/seed/wallet_seed_page.dart +++ b/lib/src/screens/seed/wallet_seed_page.dart @@ -32,13 +32,11 @@ class WalletSeedPage extends BasePage { final confirmed = await showPopUp( context: context, builder: (BuildContext context) { - // FIXME: add translations return AlertWithTwoActions( - alertTitle: 'Attention', - alertContent: - 'The seed is the only way to recover your wallet. Have you written it down?', - leftButtonText: 'Go back', - rightButtonText: 'Yes, I have', + alertTitle: S.of(context).seed_alert_title, + alertContent: S.of(context).seed_alert_content, + leftButtonText: S.of(context).seed_alert_back, + rightButtonText: S.of(context).seed_alert_yes, actionLeftButton: () => Navigator.of(context).pop(false), actionRightButton: () => Navigator.of(context).pop(true)); }) ?? diff --git a/lib/src/screens/wallet_list/wallet_list_page.dart b/lib/src/screens/wallet_list/wallet_list_page.dart index 05b35795b..5162b1c5b 100644 --- a/lib/src/screens/wallet_list/wallet_list_page.dart +++ b/lib/src/screens/wallet_list/wallet_list_page.dart @@ -87,11 +87,9 @@ class WalletListBodyState extends State { final confirmed = await showPopUp( context: context, builder: (dialogContext) { - // FIXME: return AlertWithTwoActions( - alertTitle: 'Change current wallet', - alertContent: - 'Do you want to change current wallet to ${wallet.name} ?', + alertTitle: S.of(context).change_wallet_alert_title, + alertContent: S.of(context).change_wallet_alert_content(wallet.name), leftButtonText: S.of(context).cancel, rightButtonText: S.of(context).change, actionLeftButton: () => @@ -242,12 +240,12 @@ class WalletListBodyState extends State { Future _generateNewWallet() async { try { - changeProcessText('Creating new wallet'); // FIXME: Unnamed constant + changeProcessText(S.of(context).creating_new_wallet); await widget.walletListViewModel.walletNewVM.create(options: 'English'); // FIXME: Unnamed constant hideProgressText(); await Navigator.of(context).pushNamed(Routes.seed, arguments: true); } catch(e) { - changeProcessText('Error: ${e.toString()}'); + changeProcessText(S.of(context).creating_new_wallet_error(e.toString())); } } diff --git a/res/values/strings_de.arb b/res/values/strings_de.arb index 9a6b6d057..d32c76f56 100644 --- a/res/values/strings_de.arb +++ b/res/values/strings_de.arb @@ -394,5 +394,16 @@ "confirm_delete_template" : "Diese Aktion löscht diese Vorlage. Möchten Sie fortfahren?", "confirm_delete_wallet" : "Diese Aktion löscht diese Brieftasche. Möchten Sie fortfahren?", - "picker_description" : "Um ChangeNOW oder MorphToken zu wählen, ändern Sie bitte zuerst Ihr Handelspaar" + "picker_description" : "Um ChangeNOW oder MorphToken zu wählen, ändern Sie bitte zuerst Ihr Handelspaar", + + "change_wallet_alert_title" : "Ändern Sie die aktuelle Brieftasche", + "change_wallet_alert_content" : "Möchten Sie die aktuelle Brieftasche in ändern ${wallet_name}?", + + "creating_new_wallet" : "Neue Brieftasche erstellen", + "creating_new_wallet_error" : "Error: ${description}", + + "seed_alert_title" : "Beachtung", + "seed_alert_content" : "Der Samen ist der einzige Weg, um Ihren Geldbeutel wiederzugewinnen. Hast du es aufgeschrieben?", + "seed_alert_back" : "Geh zurück", + "seed_alert_yes" : "Ja, habe ich" } \ No newline at end of file diff --git a/res/values/strings_en.arb b/res/values/strings_en.arb index 0d95645e4..b5c021ad2 100644 --- a/res/values/strings_en.arb +++ b/res/values/strings_en.arb @@ -394,5 +394,16 @@ "confirm_delete_template" : "This action will delete this template. Do you wish to continue?", "confirm_delete_wallet" : "This action will delete this wallet. Do you wish to continue?", - "picker_description" : "To choose ChangeNOW or MorphToken, please change your trading pair first" + "picker_description" : "To choose ChangeNOW or MorphToken, please change your trading pair first", + + "change_wallet_alert_title" : "Change current wallet", + "change_wallet_alert_content" : "Do you want to change current wallet to ${wallet_name}?", + + "creating_new_wallet" : "Creating new wallet", + "creating_new_wallet_error" : "Error: ${description}", + + "seed_alert_title" : "Attention", + "seed_alert_content" : "The seed is the only way to recover your wallet. Have you written it down?", + "seed_alert_back" : "Go back", + "seed_alert_yes" : "Yes, I have" } \ No newline at end of file diff --git a/res/values/strings_es.arb b/res/values/strings_es.arb index 8e9230f7b..698761e1f 100644 --- a/res/values/strings_es.arb +++ b/res/values/strings_es.arb @@ -394,5 +394,16 @@ "confirm_delete_template" : "Esta acción eliminará esta plantilla. ¿Desea continuar?", "confirm_delete_wallet" : "Esta acción eliminará esta billetera. ¿Desea continuar?", - "picker_description" : "Para elegir ChangeNOW o MorphToken, primero cambie su par comercial" + "picker_description" : "Para elegir ChangeNOW o MorphToken, primero cambie su par comercial", + + "change_wallet_alert_title" : "Cambiar billetera actual", + "change_wallet_alert_content" : "¿Quieres cambiar la billetera actual a ${wallet_name}?", + + "creating_new_wallet" : "Creando nueva billetera", + "creating_new_wallet_error" : "Error: ${description}", + + "seed_alert_title" : "Atención", + "seed_alert_content" : "La semilla es la única forma de recuperar su billetera. ¿Lo has escrito?", + "seed_alert_back" : "Regresa", + "seed_alert_yes" : "Sí tengo" } \ No newline at end of file diff --git a/res/values/strings_hi.arb b/res/values/strings_hi.arb index 2f4e8767e..ddad39dff 100644 --- a/res/values/strings_hi.arb +++ b/res/values/strings_hi.arb @@ -394,5 +394,16 @@ "confirm_delete_template" : "यह क्रिया इस टेम्पलेट को हटा देगी। क्या आप जारी रखना चाहते हैं?", "confirm_delete_wallet" : "यह क्रिया इस वॉलेट को हटा देगी। क्या आप जारी रखना चाहते हैं?", - "picker_description" : "ChangeNOW या MorphToken चुनने के लिए, कृपया अपनी ट्रेडिंग जोड़ी को पहले बदलें" + "picker_description" : "ChangeNOW या MorphToken चुनने के लिए, कृपया अपनी ट्रेडिंग जोड़ी को पहले बदलें", + + "change_wallet_alert_title" : "वर्तमान बटुआ बदलें", + "change_wallet_alert_content" : "क्या आप करंट वॉलेट को बदलना चाहते हैं ${wallet_name}?", + + "creating_new_wallet" : "नया बटुआ बनाना", + "creating_new_wallet_error" : "त्रुटि: ${description}", + + "seed_alert_title" : "ध्यान", + "seed_alert_content" : "बीज आपके बटुए को पुनर्प्राप्त करने का एकमात्र तरीका है। क्या आपने इसे लिखा है?", + "seed_alert_back" : "वापस जाओ", + "seed_alert_yes" : "हाँ मेरे पास है" } \ No newline at end of file diff --git a/res/values/strings_ja.arb b/res/values/strings_ja.arb index 7c593118a..c6e7e9ead 100644 --- a/res/values/strings_ja.arb +++ b/res/values/strings_ja.arb @@ -394,5 +394,16 @@ "confirm_delete_template" : "この操作により、このテンプレートが削除されます。 続行しますか?", "confirm_delete_wallet" : "このアクションにより、このウォレットが削除されます。 続行しますか?", - "picker_description" : "ChangeNOWまたはMorphTokenを選択するには、最初にトレーディングペアを変更してください" + "picker_description" : "ChangeNOWまたはMorphTokenを選択するには、最初にトレーディングペアを変更してください", + + "change_wallet_alert_title" : "現在のウォレットを変更する", + "change_wallet_alert_content" : "現在のウォレットをに変更しますか ${wallet_name}?", + + "creating_new_wallet" : "新しいウォレットの作成", + "creating_new_wallet_error" : "エラー: ${description}", + + "seed_alert_title" : "注意", + "seed_alert_content" : "種子はあなたの財布を回復する唯一の方法です。 書き留めましたか?", + "seed_alert_back" : "戻る", + "seed_alert_yes" : "はい、あります" } \ No newline at end of file diff --git a/res/values/strings_ko.arb b/res/values/strings_ko.arb index 4ec21ccde..8dcfcf27b 100644 --- a/res/values/strings_ko.arb +++ b/res/values/strings_ko.arb @@ -394,5 +394,16 @@ "confirm_delete_template" : "이 작업은이 템플릿을 삭제합니다. 계속 하시겠습니까?", "confirm_delete_wallet" : "이 작업은이 지갑을 삭제합니다. 계속 하시겠습니까?", - "picker_description" : "ChangeNOW 또는 MorphToken을 선택하려면 먼저 거래 쌍을 변경하십시오." + "picker_description" : "ChangeNOW 또는 MorphToken을 선택하려면 먼저 거래 쌍을 변경하십시오.", + + "change_wallet_alert_title" : "현재 지갑 변경", + "change_wallet_alert_content" : "현재 지갑을 다음으로 변경 하시겠습니까 ${wallet_name}?", + + "creating_new_wallet" : "새 지갑 생성", + "creating_new_wallet_error" : "오류: ${description}", + + "seed_alert_title" : "주의", + "seed_alert_content" : "씨앗은 지갑을 복구하는 유일한 방법입니다. 적어 보셨나요?", + "seed_alert_back" : "돌아 가기", + "seed_alert_yes" : "네, 있어요" } \ No newline at end of file diff --git a/res/values/strings_nl.arb b/res/values/strings_nl.arb index 42b376438..b554fd4be 100644 --- a/res/values/strings_nl.arb +++ b/res/values/strings_nl.arb @@ -394,5 +394,16 @@ "confirm_delete_template" : "Met deze actie wordt deze sjabloon verwijderd. Wilt u doorgaan?", "confirm_delete_wallet" : "Met deze actie wordt deze portemonnee verwijderd. Wilt u doorgaan?", - "picker_description" : "Om ChangeNOW of MorphToken te kiezen, moet u eerst uw handelspaar wijzigen" + "picker_description" : "Om ChangeNOW of MorphToken te kiezen, moet u eerst uw handelspaar wijzigen", + + "change_wallet_alert_title" : "Wijzig huidige portemonnee", + "change_wallet_alert_content" : "Wilt u de huidige portemonnee wijzigen in ${wallet_name}?", + + "creating_new_wallet" : "Nieuwe portemonnee aanmaken", + "creating_new_wallet_error" : "Fout: ${description}", + + "seed_alert_title" : "Aandacht", + "seed_alert_content" : "Het zaad is de enige manier om uw portemonnee te herstellen. Heb je het opgeschreven?", + "seed_alert_back" : "Ga terug", + "seed_alert_yes" : "Ja ik heb" } \ No newline at end of file diff --git a/res/values/strings_pl.arb b/res/values/strings_pl.arb index 679a22afa..9c8c3404e 100644 --- a/res/values/strings_pl.arb +++ b/res/values/strings_pl.arb @@ -394,5 +394,16 @@ "confirm_delete_template" : "Ta czynność usunie ten szablon. Czy chcesz kontynuować?", "confirm_delete_wallet" : "Ta czynność usunie ten portfel. Czy chcesz kontynuować?", - "picker_description" : "Aby wybrać ChangeNOW lub MorphToken, najpierw zmień swoją parę handlową" + "picker_description" : "Aby wybrać ChangeNOW lub MorphToken, najpierw zmień swoją parę handlową", + + "change_wallet_alert_title" : "Zmień obecny portfel", + "change_wallet_alert_content" : "Czy chcesz zmienić obecny portfel na ${wallet_name}?", + + "creating_new_wallet" : "Tworzenie nowego portfela", + "creating_new_wallet_error" : "Pomyłka: ${description}", + + "seed_alert_title" : "Uwaga", + "seed_alert_content" : "Ziarno to jedyny sposób na odzyskanie portfela. Zapisałeś to?", + "seed_alert_back" : "Wróć", + "seed_alert_yes" : "Tak" } \ No newline at end of file diff --git a/res/values/strings_pt.arb b/res/values/strings_pt.arb index 9c639c127..5b5f970c3 100644 --- a/res/values/strings_pt.arb +++ b/res/values/strings_pt.arb @@ -394,5 +394,16 @@ "confirm_delete_template" : "Esta ação excluirá este modelo. Você deseja continuar?", "confirm_delete_wallet" : "Esta ação excluirá esta carteira. Você deseja continuar?", - "picker_description" : "Para escolher ChangeNOW ou MorphToken, altere primeiro o seu par de negociação" + "picker_description" : "Para escolher ChangeNOW ou MorphToken, altere primeiro o seu par de negociação", + + "change_wallet_alert_title" : "Alterar carteira atual", + "change_wallet_alert_content" : "Quer mudar a carteira atual para ${wallet_name}?", + + "creating_new_wallet" : "Criando nova carteira", + "creating_new_wallet_error" : "Erro: ${description}", + + "seed_alert_title" : "Atenção", + "seed_alert_content" : "A semente é a única forma de recuperar sua carteira. Você escreveu isso?", + "seed_alert_back" : "Volte", + "seed_alert_yes" : "Sim, eu tenho" } diff --git a/res/values/strings_ru.arb b/res/values/strings_ru.arb index f2d7cec90..6ef8c8d2e 100644 --- a/res/values/strings_ru.arb +++ b/res/values/strings_ru.arb @@ -394,5 +394,16 @@ "confirm_delete_template" : "Это действие удалит шаблон. Вы хотите продолжить?", "confirm_delete_wallet" : "Это действие удалит кошелек. Вы хотите продолжить?", - "picker_description" : "Чтобы выбрать ChangeNOW или MorphToken, сначала смените пару для обмена" + "picker_description" : "Чтобы выбрать ChangeNOW или MorphToken, сначала смените пару для обмена", + + "change_wallet_alert_title" : "Изменить текущий кошелек", + "change_wallet_alert_content" : "Вы хотите изменить текущий кошелек на ${wallet_name}?", + + "creating_new_wallet" : "Создание нового кошелька", + "creating_new_wallet_error" : "Ошибка: ${description}", + + "seed_alert_title" : "Внимание", + "seed_alert_content" : "Мнемоническая фраза - единственный способ восстановить ваш кошелек. Вы записали ее?", + "seed_alert_back" : "Назад", + "seed_alert_yes" : "Да" } \ No newline at end of file diff --git a/res/values/strings_uk.arb b/res/values/strings_uk.arb index da1f88b84..f3763fd48 100644 --- a/res/values/strings_uk.arb +++ b/res/values/strings_uk.arb @@ -394,5 +394,16 @@ "confirm_delete_template" : "Ця дія видалить шаблон. Ви хочете продовжити?", "confirm_delete_wallet" : "Ця дія видалить гаманець. Ви хочете продовжити?", - "picker_description" : "Щоб вибрати ChangeNOW або MorphToken, спочатку змініть пару для обміну" + "picker_description" : "Щоб вибрати ChangeNOW або MorphToken, спочатку змініть пару для обміну", + + "change_wallet_alert_title" : "Змінити поточний гаманець", + "change_wallet_alert_content" : "Ви хочете змінити поточний гаманець на ${wallet_name}?", + + "creating_new_wallet" : "Створення нового гаманця", + "creating_new_wallet_error" : "Помилка: ${description}", + + "seed_alert_title" : "Увага", + "seed_alert_content" : "Мнемонічна фраза - єдиний спосіб відновити ваш гаманець. Ви записали її?", + "seed_alert_back" : "Назад", + "seed_alert_yes" : "Так" } \ No newline at end of file diff --git a/res/values/strings_zh.arb b/res/values/strings_zh.arb index f88a1ad23..aa32fa2e5 100644 --- a/res/values/strings_zh.arb +++ b/res/values/strings_zh.arb @@ -394,5 +394,16 @@ "confirm_delete_template" : "此操作將刪除此模板。 你想繼續嗎?", "confirm_delete_wallet" : "此操作將刪除此錢包。 你想繼續嗎?", - "picker_description" : "要選擇ChangeNOW或MorphToken,請先更改您的交易對" + "picker_description" : "要選擇ChangeNOW或MorphToken,請先更改您的交易對", + + "change_wallet_alert_title" : "更換當前錢包", + "change_wallet_alert_content" : "您要將當前的錢包更改為 ${wallet_name}?", + + "creating_new_wallet" : "創建新錢包", + "creating_new_wallet_error" : "錯誤: ${description}", + + "seed_alert_title" : "注意", + "seed_alert_content" : "種子是恢復錢包的唯一方法。 你寫下來了嗎?", + "seed_alert_back" : "回去", + "seed_alert_yes" : "是的,我有" } \ No newline at end of file From 11d85accec00b22c59b03a6c8d847ed9109a8fb7 Mon Sep 17 00:00:00 2001 From: Oleksandr Sobol Date: Fri, 30 Oct 2020 19:28:20 +0200 Subject: [PATCH 16/58] CAKE-141 | changed description for xmr.to on exchange and exchange template pages --- lib/generated/i18n.dart | 24 +++++++++---------- lib/src/screens/exchange/exchange_page.dart | 5 ++-- .../exchange/exchange_template_page.dart | 5 ++-- res/values/strings_de.arb | 2 +- res/values/strings_en.arb | 2 +- res/values/strings_es.arb | 2 +- res/values/strings_hi.arb | 2 +- res/values/strings_ja.arb | 2 +- res/values/strings_ko.arb | 2 +- res/values/strings_nl.arb | 2 +- res/values/strings_pl.arb | 2 +- res/values/strings_pt.arb | 2 +- res/values/strings_ru.arb | 2 +- res/values/strings_uk.arb | 2 +- res/values/strings_zh.arb | 2 +- 15 files changed, 28 insertions(+), 30 deletions(-) diff --git a/lib/generated/i18n.dart b/lib/generated/i18n.dart index 17de0647c..dda3ea3ef 100644 --- a/lib/generated/i18n.dart +++ b/lib/generated/i18n.dart @@ -35,7 +35,7 @@ class S implements WidgetsLocalizations { String get all => "ALL"; String get amount => "Amount: "; String get amount_is_estimate => "The receive amount is an estimate"; - String get amount_is_guaranteed => "The receive amount is guaranteed"; + String get amount_is_guaranteed => "If you enter an XMR than received amount will be estimated. If you enter a BTC amount your received amount is guaranteed"; String get auth_store_ban_timeout => "ban_timeout"; String get auth_store_banned_for => "Banned for "; String get auth_store_banned_minutes => " minutes"; @@ -475,7 +475,7 @@ class $de extends S { @override String get receive => "Erhalten"; @override - String get amount_is_guaranteed => "Der Empfangsbetrag ist garantiert"; + String get amount_is_guaranteed => "Wenn Sie eine XMR eingeben, wird der erhaltene Betrag geschätzt. Wenn Sie einen BTC-Betrag eingeben, ist Ihr erhaltener Betrag garantiert"; @override String get auth_store_banned_for => "Gebannt für "; @override @@ -1125,7 +1125,7 @@ class $hi extends S { @override String get receive => "प्राप्त करना"; @override - String get amount_is_guaranteed => "प्राप्त राशि की गारंटी है"; + String get amount_is_guaranteed => "पयदि आप एक एक्सएमआर दर्ज करते हैं तो प्राप्त राशि का अनुमान लगाया जाएगा। यदि आप BTC राशि दर्ज करते हैं तो आपकी प्राप्त राशि की गारंटी है"; @override String get auth_store_banned_for => "के लिए प्रतिबंधित है "; @override @@ -1775,7 +1775,7 @@ class $ru extends S { @override String get receive => "Получить"; @override - String get amount_is_guaranteed => "Сумма получения гарантирована"; + String get amount_is_guaranteed => "Если вы введете величину XMR, то сумма получения будет приблизительной. Если вы введете величину BTC, то сумма получения гарантирована"; @override String get auth_store_banned_for => "Заблокировано на "; @override @@ -2425,7 +2425,7 @@ class $ko extends S { @override String get receive => "받다"; @override - String get amount_is_guaranteed => "수신 금액이 보장됩니다"; + String get amount_is_guaranteed => "XMR을 입력하면받은 금액보다 추정됩니다. BTC 금액을 입력하면 수령 한 금액이 보장됩니다."; @override String get auth_store_banned_for => "금지"; @override @@ -3075,7 +3075,7 @@ class $pt extends S { @override String get receive => "Receber"; @override - String get amount_is_guaranteed => "Você receberá exatamente o valor informado acima"; + String get amount_is_guaranteed => "Se você inserir um XMR, o valor recebido será estimado. Se você inserir um valor BTC, o valor recebido é garantido"; @override String get auth_store_banned_for => "Banido por"; @override @@ -3725,7 +3725,7 @@ class $uk extends S { @override String get receive => "Отримати"; @override - String get amount_is_guaranteed => "Сума отримання гарантована"; + String get amount_is_guaranteed => "Якщо ви введете величину XMR, то сума отримання буде приблизною. Якщо ви введете величину BTC, то сума отримання гарантована"; @override String get auth_store_banned_for => "Заблоковано на "; @override @@ -4375,7 +4375,7 @@ class $ja extends S { @override String get receive => "受け取る"; @override - String get amount_is_guaranteed => "受信金額は保証されています"; + String get amount_is_guaranteed => "XMRを入力すると、受け取った金額が見積もられます。 BTC金額を入力すると、受け取った金額が保証されます"; @override String get auth_store_banned_for => "禁止されています "; @override @@ -5029,7 +5029,7 @@ class $pl extends S { @override String get receive => "Otrzymać"; @override - String get amount_is_guaranteed => "Otrzymana kwota jest gwarantowana"; + String get amount_is_guaranteed => "Jeśli wprowadzisz XMR, kwota otrzymana zostanie oszacowana. Jeśli wpiszesz kwotę BTC, Twoja otrzymana kwota jest gwarantowana"; @override String get auth_store_banned_for => "Bzbanowany za "; @override @@ -5679,7 +5679,7 @@ class $es extends S { @override String get receive => "Recibir"; @override - String get amount_is_guaranteed => "El monto recibido está garantizado"; + String get amount_is_guaranteed => "Si ingresa un XMR, se estimará la cantidad recibida. Si ingresa una cantidad de BTC, la cantidad recibida está garantizada"; @override String get auth_store_banned_for => "Prohibido para "; @override @@ -6329,7 +6329,7 @@ class $nl extends S { @override String get receive => "Krijgen"; @override - String get amount_is_guaranteed => "Het ontvangen bedrag is gegarandeerd"; + String get amount_is_guaranteed => "Als u een XMR invoert, wordt het ontvangen bedrag geschat. Als u een BTC-bedrag invoert, is uw ontvangen bedrag gegarandeerd"; @override String get auth_store_banned_for => "Verboden voor "; @override @@ -6979,7 +6979,7 @@ class $zh extends S { @override String get receive => "接收"; @override - String get amount_is_guaranteed => "接收金额有保证"; + String get amount_is_guaranteed => "如果輸入XMR,則將估算收到的金額。 如果您輸入BTC金額,則可以保證收到的金額"; @override String get auth_store_banned_for => "禁止 "; @override diff --git a/lib/src/screens/exchange/exchange_page.dart b/lib/src/screens/exchange/exchange_page.dart index add3d9c19..188a6e307 100644 --- a/lib/src/screens/exchange/exchange_page.dart +++ b/lib/src/screens/exchange/exchange_page.dart @@ -373,13 +373,12 @@ class ExchangePage extends BasePage { child: Observer(builder: (_) { final description = exchangeViewModel.provider is XMRTOExchangeProvider - ? exchangeViewModel.isReceiveAmountEntered - ? S.of(context).amount_is_guaranteed - : S.of(context).amount_is_estimate + ? S.of(context).amount_is_guaranteed : S.of(context).amount_is_estimate; return Center( child: Text( description, + textAlign: TextAlign.center, style: TextStyle( color: Theme.of(context) .primaryTextTheme diff --git a/lib/src/screens/exchange/exchange_template_page.dart b/lib/src/screens/exchange/exchange_template_page.dart index cd3923fb8..5437703ce 100644 --- a/lib/src/screens/exchange/exchange_template_page.dart +++ b/lib/src/screens/exchange/exchange_template_page.dart @@ -205,13 +205,12 @@ class ExchangeTemplatePage extends BasePage { child: Observer(builder: (_) { final description = exchangeViewModel.provider is XMRTOExchangeProvider - ? exchangeViewModel.isReceiveAmountEntered - ? S.of(context).amount_is_guaranteed - : S.of(context).amount_is_estimate + ? S.of(context).amount_is_guaranteed : S.of(context).amount_is_estimate; return Center( child: Text( description, + textAlign: TextAlign.center, style: TextStyle( color: Theme.of(context) .primaryTextTheme diff --git a/res/values/strings_de.arb b/res/values/strings_de.arb index 9a6b6d057..361b78dc7 100644 --- a/res/values/strings_de.arb +++ b/res/values/strings_de.arb @@ -65,7 +65,7 @@ "change_exchange_provider" : "Wechseln Sie den Exchange-Anbieter", "you_will_send" : "Du wirst senden", "you_will_get" : "Sie erhalten", - "amount_is_guaranteed" : "Der Empfangsbetrag ist garantiert", + "amount_is_guaranteed" : "Wenn Sie eine XMR eingeben, wird der erhaltene Betrag geschätzt. Wenn Sie einen BTC-Betrag eingeben, ist Ihr erhaltener Betrag garantiert", "amount_is_estimate" : "Der empfangene Betrag ist eine Schätzung", "powered_by" : "Unterstützt von ${title}", "error" : "Error", diff --git a/res/values/strings_en.arb b/res/values/strings_en.arb index 0d95645e4..36507dc21 100644 --- a/res/values/strings_en.arb +++ b/res/values/strings_en.arb @@ -65,7 +65,7 @@ "change_exchange_provider" : "Change Exchange Provider", "you_will_send" : "You will send", "you_will_get" : "You will get", - "amount_is_guaranteed" : "The receive amount is guaranteed", + "amount_is_guaranteed" : "If you enter an XMR than received amount will be estimated. If you enter a BTC amount your received amount is guaranteed", "amount_is_estimate" : "The receive amount is an estimate", "powered_by" : "Powered by ${title}", "error" : "Error", diff --git a/res/values/strings_es.arb b/res/values/strings_es.arb index 8e9230f7b..9596b1cd5 100644 --- a/res/values/strings_es.arb +++ b/res/values/strings_es.arb @@ -65,7 +65,7 @@ "change_exchange_provider" : "Cambiar proveedor de intercambio", "you_will_send" : "Enviarás", "you_will_get" : "Conseguirás", - "amount_is_guaranteed" : "El monto recibido está garantizado", + "amount_is_guaranteed" : "Si ingresa un XMR, se estimará la cantidad recibida. Si ingresa una cantidad de BTC, la cantidad recibida está garantizada", "amount_is_estimate" : "El monto recibido es un estimado", "powered_by" : "Energizado por ${title}", "error" : "Error", diff --git a/res/values/strings_hi.arb b/res/values/strings_hi.arb index 2f4e8767e..141860c20 100644 --- a/res/values/strings_hi.arb +++ b/res/values/strings_hi.arb @@ -65,7 +65,7 @@ "change_exchange_provider" : "एक्सचेंज प्रदाता बदलें", "you_will_send" : "तुम भेजोगे", "you_will_get" : "आपको मिल जायेगा", - "amount_is_guaranteed" : "प्राप्त राशि की गारंटी है", + "amount_is_guaranteed" : "पयदि आप एक एक्सएमआर दर्ज करते हैं तो प्राप्त राशि का अनुमान लगाया जाएगा। यदि आप BTC राशि दर्ज करते हैं तो आपकी प्राप्त राशि की गारंटी है", "amount_is_estimate" : "प्राप्त राशि एक अनुमान है", "powered_by" : "द्वारा संचालित ${title}", "error" : "त्रुटि", diff --git a/res/values/strings_ja.arb b/res/values/strings_ja.arb index 7c593118a..c0e2e5a4d 100644 --- a/res/values/strings_ja.arb +++ b/res/values/strings_ja.arb @@ -65,7 +65,7 @@ "change_exchange_provider" : "Exchangeプロバイダーの変更", "you_will_send" : "送ります", "you_will_get" : "あなたが取得します", - "amount_is_guaranteed" : "受信金額は保証されています", + "amount_is_guaranteed" : "XMRを入力すると、受け取った金額が見積もられます。 BTC金額を入力すると、受け取った金額が保証されます", "amount_is_estimate" : "受け取り金額は見積もりです", "powered_by" : "搭載 ${title}", "error" : "エラー", diff --git a/res/values/strings_ko.arb b/res/values/strings_ko.arb index 4ec21ccde..90c163a93 100644 --- a/res/values/strings_ko.arb +++ b/res/values/strings_ko.arb @@ -65,7 +65,7 @@ "change_exchange_provider" : "교환 공급자 변경", "you_will_send" : "보내드립니다", "you_will_get" : "당신은 얻을 것이다", - "amount_is_guaranteed" : "수신 금액이 보장됩니다", + "amount_is_guaranteed" : "XMR을 입력하면받은 금액보다 추정됩니다. BTC 금액을 입력하면 수령 한 금액이 보장됩니다.", "amount_is_estimate" : "수신 금액은 견적입니다", "powered_by" : "에 의해 구동 ${title}", "error" : "오류", diff --git a/res/values/strings_nl.arb b/res/values/strings_nl.arb index 42b376438..c261856ca 100644 --- a/res/values/strings_nl.arb +++ b/res/values/strings_nl.arb @@ -65,7 +65,7 @@ "change_exchange_provider" : "Wijzig Exchange Provider", "you_will_send" : "Je zal versturen", "you_will_get" : "Je zult krijgen", - "amount_is_guaranteed" : "Het ontvangen bedrag is gegarandeerd", + "amount_is_guaranteed" : "Als u een XMR invoert, wordt het ontvangen bedrag geschat. Als u een BTC-bedrag invoert, is uw ontvangen bedrag gegarandeerd", "amount_is_estimate" : "Het ontvangen bedrag is een schatting", "powered_by" : "Aangedreven door ${title}", "error" : "Fout", diff --git a/res/values/strings_pl.arb b/res/values/strings_pl.arb index 679a22afa..d6148cda0 100644 --- a/res/values/strings_pl.arb +++ b/res/values/strings_pl.arb @@ -65,7 +65,7 @@ "change_exchange_provider" : "Zmień dostawcę programu Exchange", "you_will_send" : "Wyślesz", "you_will_get" : "Dostaniesz", - "amount_is_guaranteed" : "Otrzymana kwota jest gwarantowana", + "amount_is_guaranteed" : "Jeśli wprowadzisz XMR, kwota otrzymana zostanie oszacowana. Jeśli wpiszesz kwotę BTC, Twoja otrzymana kwota jest gwarantowana", "amount_is_estimate" : "Otrzymana kwota jest wartością szacunkową", "powered_by" : "Zasilany przez ${title}", "error" : "Błąd", diff --git a/res/values/strings_pt.arb b/res/values/strings_pt.arb index 9c639c127..903b11ce0 100644 --- a/res/values/strings_pt.arb +++ b/res/values/strings_pt.arb @@ -65,7 +65,7 @@ "change_exchange_provider" : "Alterar o provedor de troca", "you_will_send" : "Você enviará", "you_will_get" : "Você receberá", - "amount_is_guaranteed" : "Você receberá exatamente o valor informado acima", + "amount_is_guaranteed" : "Se você inserir um XMR, o valor recebido será estimado. Se você inserir um valor BTC, o valor recebido é garantido", "amount_is_estimate" : "O valor a ser recebido informado acima é uma estimativa", "powered_by" : "Troca realizada por ${title}", "error" : "Erro", diff --git a/res/values/strings_ru.arb b/res/values/strings_ru.arb index f2d7cec90..3766977af 100644 --- a/res/values/strings_ru.arb +++ b/res/values/strings_ru.arb @@ -65,7 +65,7 @@ "change_exchange_provider" : "Изменить провайдера обмена", "you_will_send" : "Вы отправите", "you_will_get" : "Вы получите", - "amount_is_guaranteed" : "Сумма получения гарантирована", + "amount_is_guaranteed" : "Если вы введете величину XMR, то сумма получения будет приблизительной. Если вы введете величину BTC, то сумма получения гарантирована", "amount_is_estimate" : "Полученная сумма является приблизительной", "powered_by" : "Используя ${title}", "error" : "Ошибка", diff --git a/res/values/strings_uk.arb b/res/values/strings_uk.arb index da1f88b84..b6bcc0aa2 100644 --- a/res/values/strings_uk.arb +++ b/res/values/strings_uk.arb @@ -65,7 +65,7 @@ "change_exchange_provider" : "Змінити провайдера обміну", "you_will_send" : "Ви відправите", "you_will_get" : "Ви отримаєте", - "amount_is_guaranteed" : "Сума отримання гарантована", + "amount_is_guaranteed" : "Якщо ви введете величину XMR, то сума отримання буде приблизною. Якщо ви введете величину BTC, то сума отримання гарантована", "amount_is_estimate" : "Отримана сума є приблизною", "powered_by" : "Використовуючи ${title}", "error" : "Помилка", diff --git a/res/values/strings_zh.arb b/res/values/strings_zh.arb index f88a1ad23..15f60d836 100644 --- a/res/values/strings_zh.arb +++ b/res/values/strings_zh.arb @@ -65,7 +65,7 @@ "change_exchange_provider" : "更改交易所提供商", "you_will_send" : "您将发送", "you_will_get" : "你会得到", - "amount_is_guaranteed" : "接收金额有保证", + "amount_is_guaranteed" : "如果輸入XMR,則將估算收到的金額。 如果您輸入BTC金額,則可以保證收到的金額", "amount_is_estimate" : "收款金额为估算值", "powered_by" : "供电 ${title}", "error" : "错误", From 7ce30e08b0286b151bdec31c0a24b885787333ab Mon Sep 17 00:00:00 2001 From: OleksandrSobol Date: Mon, 2 Nov 2020 13:33:45 +0200 Subject: [PATCH 17/58] CAKE-143 | added status parameter to exchange_view_model.dart; called alert when user tries exchange deposit xmr currency but wallet is not synchronized --- lib/src/screens/exchange/exchange_page.dart | 38 ++++++++++++------- .../exchange/exchange_view_model.dart | 4 ++ 2 files changed, 29 insertions(+), 13 deletions(-) diff --git a/lib/src/screens/exchange/exchange_page.dart b/lib/src/screens/exchange/exchange_page.dart index bc9accb14..4b0e0a21e 100644 --- a/lib/src/screens/exchange/exchange_page.dart +++ b/lib/src/screens/exchange/exchange_page.dart @@ -1,4 +1,5 @@ import 'dart:ui'; +import 'package:cake_wallet/entities/sync_status.dart'; import 'package:dotted_border/dotted_border.dart'; import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; @@ -394,19 +395,30 @@ class ExchangePage extends BasePage { }), ), Observer( - builder: (_) => LoadingPrimaryButton( - text: S.of(context).exchange, - onPressed: () { - if (_formKey.currentState.validate()) { - exchangeViewModel.createTrade(); - } - }, - color: - Theme.of(context).accentTextTheme.body2.color, - textColor: Colors.white, - isLoading: exchangeViewModel.tradeState - is TradeIsCreating, - )), + builder: (_) => LoadingPrimaryButton( + text: S.of(context).exchange, + onPressed: () { + if (_formKey.currentState.validate()) { + if ((exchangeViewModel.depositCurrency == CryptoCurrency.xmr) + &&(!(exchangeViewModel.status is SyncedSyncStatus))) { + showPopUp( + context: context, + builder: (BuildContext context) { + return AlertWithOneAction( + alertTitle: S.of(context).exchange, + alertContent: 'Please wait until your wallet is synchronized', + buttonText: S.of(context).ok, + buttonAction: () => Navigator.of(context).pop()); + }); + } else { + exchangeViewModel.createTrade(); + } + } + }, + color: Theme.of(context).accentTextTheme.body2.color, + textColor: Colors.white, + isLoading: exchangeViewModel.tradeState + is TradeIsCreating)), ]), )), )); diff --git a/lib/view_model/exchange/exchange_view_model.dart b/lib/view_model/exchange/exchange_view_model.dart index 2f8d28cd4..199ae016f 100644 --- a/lib/view_model/exchange/exchange_view_model.dart +++ b/lib/view_model/exchange/exchange_view_model.dart @@ -1,5 +1,6 @@ import 'package:cake_wallet/core/wallet_base.dart'; import 'package:cake_wallet/entities/crypto_currency.dart'; +import 'package:cake_wallet/entities/sync_status.dart'; import 'package:cake_wallet/entities/wallet_type.dart'; import 'package:cake_wallet/exchange/exchange_provider.dart'; import 'package:cake_wallet/exchange/limits.dart'; @@ -100,6 +101,9 @@ abstract class ExchangeViewModelBase with Store { NumberFormat _cryptoNumberFormat; + @computed + SyncStatus get status => wallet.syncStatus; + @computed ObservableList get templates => _exchangeTemplateStore.templates; From b642f9986fcc1120a8e6d8879d74385c0340783b Mon Sep 17 00:00:00 2001 From: Oleksandr Sobol Date: Mon, 2 Nov 2020 15:02:40 +0200 Subject: [PATCH 18/58] CAKE-143 | added localization to exchange alert --- lib/generated/i18n.dart | 23 +++++++++++++++++++++ lib/src/screens/exchange/exchange_page.dart | 2 +- res/values/strings_de.arb | 4 +++- res/values/strings_en.arb | 4 +++- res/values/strings_es.arb | 4 +++- res/values/strings_hi.arb | 4 +++- res/values/strings_ja.arb | 4 +++- res/values/strings_ko.arb | 4 +++- res/values/strings_nl.arb | 4 +++- res/values/strings_pl.arb | 4 +++- res/values/strings_pt.arb | 4 +++- res/values/strings_ru.arb | 4 +++- res/values/strings_uk.arb | 4 +++- res/values/strings_zh.arb | 4 +++- 14 files changed, 60 insertions(+), 13 deletions(-) diff --git a/lib/generated/i18n.dart b/lib/generated/i18n.dart index 7af906ef9..1fed39772 100644 --- a/lib/generated/i18n.dart +++ b/lib/generated/i18n.dart @@ -95,6 +95,7 @@ class S implements WidgetsLocalizations { String get exchange_new_template => "New template"; String get exchange_result_write_down_ID => "*Please copy or write down your ID shown above."; String get exchange_result_write_down_trade_id => "Please copy or write down the trade ID to continue."; + String get exchange_sync_alert_content => "Please wait until your wallet is synchronized"; String get expired => "Expired"; String get faq => "FAQ"; String get fetching => "Fetching"; @@ -669,6 +670,8 @@ class $de extends S { @override String get restore_bitcoin_title_from_keys => "Aus WIF wiederherstellen"; @override + String get exchange_sync_alert_content => "Bitte warten Sie, bis Ihre Brieftasche synchronisiert ist"; + @override String get scan_qr_code => "Scannen Sie den QR-Code, um die Adresse zu erhalten"; @override String get trade_state_paid => "Bezahlt"; @@ -1335,6 +1338,8 @@ class $hi extends S { @override String get restore_bitcoin_title_from_keys => "WIF से पुनर्स्थापित करें"; @override + String get exchange_sync_alert_content => "कृपया प्रतीक्षा करें जब तक आपका बटुआ सिंक्रनाइज़ नहीं किया जाता है"; + @override String get scan_qr_code => "पता प्राप्त करने के लिए QR कोड स्कैन करें"; @override String get trade_state_paid => "भुगतान किया है"; @@ -2001,6 +2006,8 @@ class $ru extends S { @override String get restore_bitcoin_title_from_keys => "Восстановить с помощью WIF"; @override + String get exchange_sync_alert_content => "Подождите, пока ваш кошелек синхронизируется"; + @override String get scan_qr_code => "Отсканируйте QR-код для получения адреса"; @override String get trade_state_paid => "Оплаченная"; @@ -2667,6 +2674,8 @@ class $ko extends S { @override String get restore_bitcoin_title_from_keys => "WIF에서 복원"; @override + String get exchange_sync_alert_content => "지갑이 동기화 될 때까지 기다리십시오"; + @override String get scan_qr_code => "QR 코드를 스캔하여 주소를 얻습니다."; @override String get trade_state_paid => "유료"; @@ -3333,6 +3342,8 @@ class $pt extends S { @override String get restore_bitcoin_title_from_keys => "Restaurar de WIF"; @override + String get exchange_sync_alert_content => "Por favor, espere até que sua carteira seja sincronizada"; + @override String get scan_qr_code => "Digitalize o código QR para obter o endereço"; @override String get trade_state_paid => "Paga"; @@ -3999,6 +4010,8 @@ class $uk extends S { @override String get restore_bitcoin_title_from_keys => "Відновити за допомогою WIF"; @override + String get exchange_sync_alert_content => "Зачекайте, поки ваш гаманець не синхронізується"; + @override String get scan_qr_code => "Скануйте QR-код для одержання адреси"; @override String get trade_state_paid => "Оплачена"; @@ -4665,6 +4678,8 @@ class $ja extends S { @override String get restore_bitcoin_title_from_keys => "WIFから復元"; @override + String get exchange_sync_alert_content => "ウォレットが同期されるまでお待ちください"; + @override String get scan_qr_code => "QRコードをスキャンして住所を取得します"; @override String get trade_state_paid => "有料"; @@ -5335,6 +5350,8 @@ class $pl extends S { @override String get restore_bitcoin_title_from_keys => "Przywróć z WIF"; @override + String get exchange_sync_alert_content => "Poczekaj, aż portfel zostanie zsynchronizowany"; + @override String get scan_qr_code => "Zeskanuj kod QR, aby uzyskać adres"; @override String get trade_state_paid => "Płatny"; @@ -6001,6 +6018,8 @@ class $es extends S { @override String get restore_bitcoin_title_from_keys => "Restaurar desde WIF"; @override + String get exchange_sync_alert_content => "Espere hasta que su billetera esté sincronizada"; + @override String get scan_qr_code => "Escanee el código QR para obtener la dirección"; @override String get trade_state_paid => "Pagado"; @@ -6667,6 +6686,8 @@ class $nl extends S { @override String get restore_bitcoin_title_from_keys => "Herstel van WIF"; @override + String get exchange_sync_alert_content => "Wacht tot uw portemonnee is gesynchroniseerd"; + @override String get scan_qr_code => "Scan de QR-code om het adres te krijgen"; @override String get trade_state_paid => "Betaald"; @@ -7333,6 +7354,8 @@ class $zh extends S { @override String get restore_bitcoin_title_from_keys => "從WIF還原"; @override + String get exchange_sync_alert_content => "請等待,直到您的錢包同步"; + @override String get scan_qr_code => "掃描二維碼獲取地址"; @override String get trade_state_paid => "已付费"; diff --git a/lib/src/screens/exchange/exchange_page.dart b/lib/src/screens/exchange/exchange_page.dart index 4b0e0a21e..7d90c177c 100644 --- a/lib/src/screens/exchange/exchange_page.dart +++ b/lib/src/screens/exchange/exchange_page.dart @@ -406,7 +406,7 @@ class ExchangePage extends BasePage { builder: (BuildContext context) { return AlertWithOneAction( alertTitle: S.of(context).exchange, - alertContent: 'Please wait until your wallet is synchronized', + alertContent: S.of(context).exchange_sync_alert_content, buttonText: S.of(context).ok, buttonAction: () => Navigator.of(context).pop()); }); diff --git a/res/values/strings_de.arb b/res/values/strings_de.arb index 63e2edbad..81078926e 100644 --- a/res/values/strings_de.arb +++ b/res/values/strings_de.arb @@ -405,5 +405,7 @@ "seed_alert_title" : "Beachtung", "seed_alert_content" : "Der Samen ist der einzige Weg, um Ihren Geldbeutel wiederzugewinnen. Hast du es aufgeschrieben?", "seed_alert_back" : "Geh zurück", - "seed_alert_yes" : "Ja, habe ich" + "seed_alert_yes" : "Ja, habe ich", + + "exchange_sync_alert_content" : "Bitte warten Sie, bis Ihre Brieftasche synchronisiert ist" } \ No newline at end of file diff --git a/res/values/strings_en.arb b/res/values/strings_en.arb index 8ac4c8779..85190ac93 100644 --- a/res/values/strings_en.arb +++ b/res/values/strings_en.arb @@ -405,5 +405,7 @@ "seed_alert_title" : "Attention", "seed_alert_content" : "The seed is the only way to recover your wallet. Have you written it down?", "seed_alert_back" : "Go back", - "seed_alert_yes" : "Yes, I have" + "seed_alert_yes" : "Yes, I have", + + "exchange_sync_alert_content" : "Please wait until your wallet is synchronized" } \ No newline at end of file diff --git a/res/values/strings_es.arb b/res/values/strings_es.arb index 94c86e900..2d76a9cff 100644 --- a/res/values/strings_es.arb +++ b/res/values/strings_es.arb @@ -405,5 +405,7 @@ "seed_alert_title" : "Atención", "seed_alert_content" : "La semilla es la única forma de recuperar su billetera. ¿Lo has escrito?", "seed_alert_back" : "Regresa", - "seed_alert_yes" : "Sí tengo" + "seed_alert_yes" : "Sí tengo", + + "exchange_sync_alert_content" : "Espere hasta que su billetera esté sincronizada" } \ No newline at end of file diff --git a/res/values/strings_hi.arb b/res/values/strings_hi.arb index 0dbe61c47..f3c5d9d02 100644 --- a/res/values/strings_hi.arb +++ b/res/values/strings_hi.arb @@ -405,5 +405,7 @@ "seed_alert_title" : "ध्यान", "seed_alert_content" : "बीज आपके बटुए को पुनर्प्राप्त करने का एकमात्र तरीका है। क्या आपने इसे लिखा है?", "seed_alert_back" : "वापस जाओ", - "seed_alert_yes" : "हाँ मेरे पास है" + "seed_alert_yes" : "हाँ मेरे पास है", + + "exchange_sync_alert_content" : "कृपया प्रतीक्षा करें जब तक आपका बटुआ सिंक्रनाइज़ नहीं किया जाता है" } \ No newline at end of file diff --git a/res/values/strings_ja.arb b/res/values/strings_ja.arb index e6197f9de..54fff676e 100644 --- a/res/values/strings_ja.arb +++ b/res/values/strings_ja.arb @@ -405,5 +405,7 @@ "seed_alert_title" : "注意", "seed_alert_content" : "種子はあなたの財布を回復する唯一の方法です。 書き留めましたか?", "seed_alert_back" : "戻る", - "seed_alert_yes" : "はい、あります" + "seed_alert_yes" : "はい、あります", + + "exchange_sync_alert_content" : "ウォレットが同期されるまでお待ちください" } \ No newline at end of file diff --git a/res/values/strings_ko.arb b/res/values/strings_ko.arb index a6c67f803..0159f5199 100644 --- a/res/values/strings_ko.arb +++ b/res/values/strings_ko.arb @@ -405,5 +405,7 @@ "seed_alert_title" : "주의", "seed_alert_content" : "씨앗은 지갑을 복구하는 유일한 방법입니다. 적어 보셨나요?", "seed_alert_back" : "돌아 가기", - "seed_alert_yes" : "네, 있어요" + "seed_alert_yes" : "네, 있어요", + + "exchange_sync_alert_content" : "지갑이 동기화 될 때까지 기다리십시오" } \ No newline at end of file diff --git a/res/values/strings_nl.arb b/res/values/strings_nl.arb index 1ebba301b..d7239bd3a 100644 --- a/res/values/strings_nl.arb +++ b/res/values/strings_nl.arb @@ -405,5 +405,7 @@ "seed_alert_title" : "Aandacht", "seed_alert_content" : "Het zaad is de enige manier om uw portemonnee te herstellen. Heb je het opgeschreven?", "seed_alert_back" : "Ga terug", - "seed_alert_yes" : "Ja ik heb" + "seed_alert_yes" : "Ja ik heb", + + "exchange_sync_alert_content" : "Wacht tot uw portemonnee is gesynchroniseerd" } \ No newline at end of file diff --git a/res/values/strings_pl.arb b/res/values/strings_pl.arb index fa92603dd..a8019d8ac 100644 --- a/res/values/strings_pl.arb +++ b/res/values/strings_pl.arb @@ -405,5 +405,7 @@ "seed_alert_title" : "Uwaga", "seed_alert_content" : "Ziarno to jedyny sposób na odzyskanie portfela. Zapisałeś to?", "seed_alert_back" : "Wróć", - "seed_alert_yes" : "Tak" + "seed_alert_yes" : "Tak", + + "exchange_sync_alert_content" : "Poczekaj, aż portfel zostanie zsynchronizowany" } \ No newline at end of file diff --git a/res/values/strings_pt.arb b/res/values/strings_pt.arb index 28c7188ff..6417f139c 100644 --- a/res/values/strings_pt.arb +++ b/res/values/strings_pt.arb @@ -405,5 +405,7 @@ "seed_alert_title" : "Atenção", "seed_alert_content" : "A semente é a única forma de recuperar sua carteira. Você escreveu isso?", "seed_alert_back" : "Volte", - "seed_alert_yes" : "Sim, eu tenho" + "seed_alert_yes" : "Sim, eu tenho", + + "exchange_sync_alert_content" : "Por favor, espere até que sua carteira seja sincronizada" } diff --git a/res/values/strings_ru.arb b/res/values/strings_ru.arb index 4db943f32..1715a8299 100644 --- a/res/values/strings_ru.arb +++ b/res/values/strings_ru.arb @@ -405,5 +405,7 @@ "seed_alert_title" : "Внимание", "seed_alert_content" : "Мнемоническая фраза - единственный способ восстановить ваш кошелек. Вы записали ее?", "seed_alert_back" : "Назад", - "seed_alert_yes" : "Да" + "seed_alert_yes" : "Да", + + "exchange_sync_alert_content" : "Подождите, пока ваш кошелек синхронизируется" } \ No newline at end of file diff --git a/res/values/strings_uk.arb b/res/values/strings_uk.arb index 62a1645e8..d0af992ff 100644 --- a/res/values/strings_uk.arb +++ b/res/values/strings_uk.arb @@ -405,5 +405,7 @@ "seed_alert_title" : "Увага", "seed_alert_content" : "Мнемонічна фраза - єдиний спосіб відновити ваш гаманець. Ви записали її?", "seed_alert_back" : "Назад", - "seed_alert_yes" : "Так" + "seed_alert_yes" : "Так", + + "exchange_sync_alert_content" : "Зачекайте, поки ваш гаманець не синхронізується" } \ No newline at end of file diff --git a/res/values/strings_zh.arb b/res/values/strings_zh.arb index 487392d10..ab9e2b098 100644 --- a/res/values/strings_zh.arb +++ b/res/values/strings_zh.arb @@ -405,5 +405,7 @@ "seed_alert_title" : "注意", "seed_alert_content" : "種子是恢復錢包的唯一方法。 你寫下來了嗎?", "seed_alert_back" : "回去", - "seed_alert_yes" : "是的,我有" + "seed_alert_yes" : "是的,我有", + + "exchange_sync_alert_content" : "請等待,直到您的錢包同步" } \ No newline at end of file From c65efd9452b308db060340b825524bc0867fe444 Mon Sep 17 00:00:00 2001 From: Oleksandr Sobol Date: Mon, 2 Nov 2020 16:03:19 +0200 Subject: [PATCH 19/58] CAKE-144 | changed string resources on the exchange page --- lib/generated/i18n.dart | 72 +++++++++++++++++++-------------------- res/values/strings_de.arb | 6 ++-- res/values/strings_en.arb | 6 ++-- res/values/strings_es.arb | 6 ++-- res/values/strings_hi.arb | 6 ++-- res/values/strings_ja.arb | 6 ++-- res/values/strings_ko.arb | 6 ++-- res/values/strings_nl.arb | 6 ++-- res/values/strings_pl.arb | 6 ++-- res/values/strings_pt.arb | 6 ++-- res/values/strings_ru.arb | 6 ++-- res/values/strings_uk.arb | 6 ++-- res/values/strings_zh.arb | 6 ++-- 13 files changed, 72 insertions(+), 72 deletions(-) diff --git a/lib/generated/i18n.dart b/lib/generated/i18n.dart index 7af906ef9..b3c74d494 100644 --- a/lib/generated/i18n.dart +++ b/lib/generated/i18n.dart @@ -35,7 +35,7 @@ class S implements WidgetsLocalizations { String get all => "ALL"; String get amount => "Amount: "; String get amount_is_estimate => "The receive amount is an estimate"; - String get amount_is_guaranteed => "If you enter an XMR than received amount will be estimated. If you enter a BTC amount your received amount is guaranteed"; + String get amount_is_guaranteed => "IMPORTANT:\nIf you want to receive a guaranteed amount of BTC, please enter that amount in the BTC field. If you enter an XMR amount instead, then the BTC amount received is an estimate and can fluctuate depending on the rates."; String get auth_store_ban_timeout => "ban_timeout"; String get auth_store_banned_for => "Banned for "; String get auth_store_banned_minutes => " minutes"; @@ -317,8 +317,8 @@ class S implements WidgetsLocalizations { String get xmr_full_balance => "Full Balance"; String get xmr_hidden => "Hidden"; String get yesterday => "Yesterday"; - String get you_will_get => "You will get"; - String get you_will_send => "You will send"; + String get you_will_get => "Convert to"; + String get you_will_send => "Convert from"; String Blocks_remaining(String status) => "${status} Blocks Remaining"; String change_current_node(String node) => "Are you sure to change current node to ${node}?"; String change_language_to(String language) => "Change language to ${language}?"; @@ -387,7 +387,7 @@ class $de extends S { @override String get password => "Passwort"; @override - String get you_will_get => "Sie erhalten"; + String get you_will_get => "Konvertieren zu"; @override String get trade_id => "Handel-ID:"; @override @@ -485,7 +485,7 @@ class $de extends S { @override String get receive => "Erhalten"; @override - String get amount_is_guaranteed => "Wenn Sie eine XMR eingeben, wird der erhaltene Betrag geschätzt. Wenn Sie einen BTC-Betrag eingeben, ist Ihr erhaltener Betrag garantiert"; + String get amount_is_guaranteed => "WICHTIG:\nWenn Sie einen garantierten BTC-Betrag erhalten möchten, geben Sie diesen Betrag in das Feld BTC ein. Wenn Sie stattdessen einen XMR-Betrag eingeben, handelt es sich bei dem erhaltenen BTC-Betrag um eine Schätzung, die je nach Kurs schwanken kann."; @override String get auth_store_banned_for => "Gebannt für "; @override @@ -505,7 +505,7 @@ class $de extends S { @override String get seed_language_japanese => "Japanisch"; @override - String get you_will_send => "Du wirst senden"; + String get you_will_send => "Konvertieren von"; @override String get seed_language_german => "Deutsche"; @override @@ -1053,7 +1053,7 @@ class $hi extends S { @override String get password => "पारण शब्द"; @override - String get you_will_get => "आपको मिल जायेगा"; + String get you_will_get => "में बदलें"; @override String get trade_id => "व्यापार ID:"; @override @@ -1151,7 +1151,7 @@ class $hi extends S { @override String get receive => "प्राप्त करना"; @override - String get amount_is_guaranteed => "पयदि आप एक एक्सएमआर दर्ज करते हैं तो प्राप्त राशि का अनुमान लगाया जाएगा। यदि आप BTC राशि दर्ज करते हैं तो आपकी प्राप्त राशि की गारंटी है"; + String get amount_is_guaranteed => "महत्वपूर्ण:\nयदि आप BTC की गारंटीकृत राशि प्राप्त करना चाहते हैं, तो कृपया उस राशि को BTC फ़ील्ड में दर्ज करें। यदि आप इसके बजाय एक एक्सएमआर राशि दर्ज करते हैं, तो प्राप्त बीटीसी राशि एक अनुमान है और दरों के आधार पर इसमें उतार-चढ़ाव हो सकता है।"; @override String get auth_store_banned_for => "के लिए प्रतिबंधित है "; @override @@ -1171,7 +1171,7 @@ class $hi extends S { @override String get seed_language_japanese => "जापानी"; @override - String get you_will_send => "तुम भेजोगे"; + String get you_will_send => "से रूपांतरित करें"; @override String get seed_language_german => "जर्मन"; @override @@ -1719,7 +1719,7 @@ class $ru extends S { @override String get password => "Пароль"; @override - String get you_will_get => "Вы получите"; + String get you_will_get => "Конвертировать в"; @override String get trade_id => "ID сделки:"; @override @@ -1817,7 +1817,7 @@ class $ru extends S { @override String get receive => "Получить"; @override - String get amount_is_guaranteed => "Если вы введете величину XMR, то сумма получения будет приблизительной. Если вы введете величину BTC, то сумма получения гарантирована"; + String get amount_is_guaranteed => "ВАЖНО:\nЕсли вы хотите получить гарантированную сумму BTC, введите эту сумму в поле BTC. Если вместо этого вы вводите сумму XMR, полученная сумма BTC является приблизительной и может колебаться в зависимости от курса."; @override String get auth_store_banned_for => "Заблокировано на "; @override @@ -1837,7 +1837,7 @@ class $ru extends S { @override String get seed_language_japanese => "Японский"; @override - String get you_will_send => "Вы отправите"; + String get you_will_send => "Конвертировать из"; @override String get seed_language_german => "Немецкий"; @override @@ -2385,7 +2385,7 @@ class $ko extends S { @override String get password => "암호"; @override - String get you_will_get => "당신은 얻을 것이다"; + String get you_will_get => "로 변환하다"; @override String get trade_id => "무역 ID:"; @override @@ -2483,7 +2483,7 @@ class $ko extends S { @override String get receive => "받다"; @override - String get amount_is_guaranteed => "XMR을 입력하면받은 금액보다 추정됩니다. BTC 금액을 입력하면 수령 한 금액이 보장됩니다."; + String get amount_is_guaranteed => "중대한:\n보장 된 BTC 금액을 받으려면 BTC 필드에 해당 금액을 입력하십시오. 대신 XMR 금액을 입력하면 수령 한 BTC 금액이 추정치이며 요율에 따라 변동될 수 있습니다."; @override String get auth_store_banned_for => "금지"; @override @@ -2503,7 +2503,7 @@ class $ko extends S { @override String get seed_language_japanese => "일본어"; @override - String get you_will_send => "보내드립니다"; + String get you_will_send => "다음에서 변환"; @override String get seed_language_german => "독일 사람"; @override @@ -3051,7 +3051,7 @@ class $pt extends S { @override String get password => "Senha"; @override - String get you_will_get => "Você receberá"; + String get you_will_get => "Converter para"; @override String get trade_id => "ID da troca:"; @override @@ -3149,7 +3149,7 @@ class $pt extends S { @override String get receive => "Receber"; @override - String get amount_is_guaranteed => "Se você inserir um XMR, o valor recebido será estimado. Se você inserir um valor BTC, o valor recebido é garantido"; + String get amount_is_guaranteed => "IMPORTANTE:\nSe você deseja receber um valor garantido de BTC, insira esse valor no campo BTC. Se, em vez disso, você inserir um valor XMR, o valor BTC recebido é uma estimativa e pode flutuar dependendo das taxas."; @override String get auth_store_banned_for => "Banido por"; @override @@ -3169,7 +3169,7 @@ class $pt extends S { @override String get seed_language_japanese => "Japonês"; @override - String get you_will_send => "Você enviará"; + String get you_will_send => "Converter de"; @override String get seed_language_german => "Alemã"; @override @@ -3717,7 +3717,7 @@ class $uk extends S { @override String get password => "Пароль"; @override - String get you_will_get => "Ви отримаєте"; + String get you_will_get => "Конвертувати в"; @override String get trade_id => "ID операції:"; @override @@ -3815,7 +3815,7 @@ class $uk extends S { @override String get receive => "Отримати"; @override - String get amount_is_guaranteed => "Якщо ви введете величину XMR, то сума отримання буде приблизною. Якщо ви введете величину BTC, то сума отримання гарантована"; + String get amount_is_guaranteed => "ВАЖЛИВО:\nЯкщо ви хочете отримати гарантовану суму BTC, введіть цю суму в поле BTC. Якщо замість цього ввести суму XMR, отримана сума BTC є приблизною і може коливатися залежно від курсу."; @override String get auth_store_banned_for => "Заблоковано на "; @override @@ -3835,7 +3835,7 @@ class $uk extends S { @override String get seed_language_japanese => "Японська"; @override - String get you_will_send => "Ви відправите"; + String get you_will_send => "Конвертувати з"; @override String get seed_language_german => "Німецька"; @override @@ -4383,7 +4383,7 @@ class $ja extends S { @override String get password => "パスワード"; @override - String get you_will_get => "あなたが取得します"; + String get you_will_get => "に変換"; @override String get trade_id => "取引ID:"; @override @@ -4481,7 +4481,7 @@ class $ja extends S { @override String get receive => "受け取る"; @override - String get amount_is_guaranteed => "XMRを入力すると、受け取った金額が見積もられます。 BTC金額を入力すると、受け取った金額が保証されます"; + String get amount_is_guaranteed => "重要:\n保証された金額のBTCを受け取りたい場合は、その金額を[BTC]フィールドに入力してください。 代わりにXMR金額を入力した場合、受け取ったBTC金額は見積もりであり、レートに応じて変動する可能性があります。"; @override String get auth_store_banned_for => "禁止されています "; @override @@ -4501,7 +4501,7 @@ class $ja extends S { @override String get seed_language_japanese => "日本語"; @override - String get you_will_send => "送ります"; + String get you_will_send => "から変換"; @override String get seed_language_german => "ドイツ人"; @override @@ -5053,7 +5053,7 @@ class $pl extends S { @override String get password => "Hasło"; @override - String get you_will_get => "Dostaniesz"; + String get you_will_get => "Konwertuj na"; @override String get trade_id => "Identyfikator handlu:"; @override @@ -5151,7 +5151,7 @@ class $pl extends S { @override String get receive => "Otrzymać"; @override - String get amount_is_guaranteed => "Jeśli wprowadzisz XMR, kwota otrzymana zostanie oszacowana. Jeśli wpiszesz kwotę BTC, Twoja otrzymana kwota jest gwarantowana"; + String get amount_is_guaranteed => "WAŻNY:\nJeśli chcesz otrzymać gwarantowaną kwotę BTC, wprowadź tę kwotę w polu BTC. Jeśli zamiast tego wpiszesz kwotę XMR, otrzymana kwota BTC jest szacunkowa i może się zmieniać w zależności od stawek."; @override String get auth_store_banned_for => "Bzbanowany za "; @override @@ -5171,7 +5171,7 @@ class $pl extends S { @override String get seed_language_japanese => "Japoński"; @override - String get you_will_send => "Wyślesz"; + String get you_will_send => "Konwertuj z"; @override String get seed_language_german => "Niemiecki"; @override @@ -5719,7 +5719,7 @@ class $es extends S { @override String get password => "Contraseña"; @override - String get you_will_get => "Conseguirás"; + String get you_will_get => "Convertir a"; @override String get trade_id => "Comercial ID:"; @override @@ -5817,7 +5817,7 @@ class $es extends S { @override String get receive => "Recibir"; @override - String get amount_is_guaranteed => "Si ingresa un XMR, se estimará la cantidad recibida. Si ingresa una cantidad de BTC, la cantidad recibida está garantizada"; + String get amount_is_guaranteed => "IMPORTANTE:\nSi desea recibir una cantidad garantizada de BTC, ingrese esa cantidad en el campo BTC. Si ingresa una cantidad de XMR en su lugar, la cantidad de BTC recibida es una estimación y puede variar según las tarifas."; @override String get auth_store_banned_for => "Prohibido para "; @override @@ -5837,7 +5837,7 @@ class $es extends S { @override String get seed_language_japanese => "Japonés"; @override - String get you_will_send => "Enviarás"; + String get you_will_send => "Convertir de"; @override String get seed_language_german => "Alemán"; @override @@ -6385,7 +6385,7 @@ class $nl extends S { @override String get password => "Wachtwoord"; @override - String get you_will_get => "Je zult krijgen"; + String get you_will_get => "Converteren naar"; @override String get trade_id => "Trade ID:"; @override @@ -6483,7 +6483,7 @@ class $nl extends S { @override String get receive => "Krijgen"; @override - String get amount_is_guaranteed => "Als u een XMR invoert, wordt het ontvangen bedrag geschat. Als u een BTC-bedrag invoert, is uw ontvangen bedrag gegarandeerd"; + String get amount_is_guaranteed => "BELANGRIJK:\nAls u een gegarandeerd bedrag aan BTC wilt ontvangen, voert u dat bedrag in het BTC-veld in. Als u in plaats daarvan een XMR-bedrag invoert, is het ontvangen BTC-bedrag een schatting en kan het fluctueren afhankelijk van de tarieven."; @override String get auth_store_banned_for => "Verboden voor "; @override @@ -6503,7 +6503,7 @@ class $nl extends S { @override String get seed_language_japanese => "Japans"; @override - String get you_will_send => "Je zal versturen"; + String get you_will_send => "Converteren van"; @override String get seed_language_german => "Duitse"; @override @@ -7051,7 +7051,7 @@ class $zh extends S { @override String get password => "密码"; @override - String get you_will_get => "你会得到"; + String get you_will_get => "轉換成"; @override String get trade_id => "贸易编号:"; @override @@ -7149,7 +7149,7 @@ class $zh extends S { @override String get receive => "接收"; @override - String get amount_is_guaranteed => "如果輸入XMR,則將估算收到的金額。 如果您輸入BTC金額,則可以保證收到的金額"; + String get amount_is_guaranteed => "重要:\n如果您想獲得保證的BTC金額,請在BTC字段中輸入該金額。 如果您輸入的是XMR金額,則收到的BTC金額只是估算值,可能會隨匯率而波動。"; @override String get auth_store_banned_for => "禁止 "; @override @@ -7169,7 +7169,7 @@ class $zh extends S { @override String get seed_language_japanese => "日本"; @override - String get you_will_send => "您将发送"; + String get you_will_send => "從轉換"; @override String get seed_language_german => "德語"; @override diff --git a/res/values/strings_de.arb b/res/values/strings_de.arb index 63e2edbad..6c8ce36bd 100644 --- a/res/values/strings_de.arb +++ b/res/values/strings_de.arb @@ -63,9 +63,9 @@ "clear" : "klar", "refund_address" : "Rückerstattungsadresse", "change_exchange_provider" : "Wechseln Sie den Exchange-Anbieter", - "you_will_send" : "Du wirst senden", - "you_will_get" : "Sie erhalten", - "amount_is_guaranteed" : "Wenn Sie eine XMR eingeben, wird der erhaltene Betrag geschätzt. Wenn Sie einen BTC-Betrag eingeben, ist Ihr erhaltener Betrag garantiert", + "you_will_send" : "Konvertieren von", + "you_will_get" : "Konvertieren zu", + "amount_is_guaranteed" : "WICHTIG:\nWenn Sie einen garantierten BTC-Betrag erhalten möchten, geben Sie diesen Betrag in das Feld BTC ein. Wenn Sie stattdessen einen XMR-Betrag eingeben, handelt es sich bei dem erhaltenen BTC-Betrag um eine Schätzung, die je nach Kurs schwanken kann.", "amount_is_estimate" : "Der empfangene Betrag ist eine Schätzung", "powered_by" : "Unterstützt von ${title}", "error" : "Error", diff --git a/res/values/strings_en.arb b/res/values/strings_en.arb index 8ac4c8779..6bae7133f 100644 --- a/res/values/strings_en.arb +++ b/res/values/strings_en.arb @@ -63,9 +63,9 @@ "clear" : "Clear", "refund_address" : "Refund address", "change_exchange_provider" : "Change Exchange Provider", - "you_will_send" : "You will send", - "you_will_get" : "You will get", - "amount_is_guaranteed" : "If you enter an XMR than received amount will be estimated. If you enter a BTC amount your received amount is guaranteed", + "you_will_send" : "Convert from", + "you_will_get" : "Convert to", + "amount_is_guaranteed" : "IMPORTANT:\nIf you want to receive a guaranteed amount of BTC, please enter that amount in the BTC field. If you enter an XMR amount instead, then the BTC amount received is an estimate and can fluctuate depending on the rates.", "amount_is_estimate" : "The receive amount is an estimate", "powered_by" : "Powered by ${title}", "error" : "Error", diff --git a/res/values/strings_es.arb b/res/values/strings_es.arb index 94c86e900..adfee6279 100644 --- a/res/values/strings_es.arb +++ b/res/values/strings_es.arb @@ -63,9 +63,9 @@ "clear" : "Claro", "refund_address" : "Dirección de reembolso", "change_exchange_provider" : "Cambiar proveedor de intercambio", - "you_will_send" : "Enviarás", - "you_will_get" : "Conseguirás", - "amount_is_guaranteed" : "Si ingresa un XMR, se estimará la cantidad recibida. Si ingresa una cantidad de BTC, la cantidad recibida está garantizada", + "you_will_send" : "Convertir de", + "you_will_get" : "Convertir a", + "amount_is_guaranteed" : "IMPORTANTE:\nSi desea recibir una cantidad garantizada de BTC, ingrese esa cantidad en el campo BTC. Si ingresa una cantidad de XMR en su lugar, la cantidad de BTC recibida es una estimación y puede variar según las tarifas.", "amount_is_estimate" : "El monto recibido es un estimado", "powered_by" : "Energizado por ${title}", "error" : "Error", diff --git a/res/values/strings_hi.arb b/res/values/strings_hi.arb index 0dbe61c47..eee72cce4 100644 --- a/res/values/strings_hi.arb +++ b/res/values/strings_hi.arb @@ -63,9 +63,9 @@ "clear" : "स्पष्ट", "refund_address" : "वापसी का पता", "change_exchange_provider" : "एक्सचेंज प्रदाता बदलें", - "you_will_send" : "तुम भेजोगे", - "you_will_get" : "आपको मिल जायेगा", - "amount_is_guaranteed" : "पयदि आप एक एक्सएमआर दर्ज करते हैं तो प्राप्त राशि का अनुमान लगाया जाएगा। यदि आप BTC राशि दर्ज करते हैं तो आपकी प्राप्त राशि की गारंटी है", + "you_will_send" : "से रूपांतरित करें", + "you_will_get" : "में बदलें", + "amount_is_guaranteed" : "महत्वपूर्ण:\nयदि आप BTC की गारंटीकृत राशि प्राप्त करना चाहते हैं, तो कृपया उस राशि को BTC फ़ील्ड में दर्ज करें। यदि आप इसके बजाय एक एक्सएमआर राशि दर्ज करते हैं, तो प्राप्त बीटीसी राशि एक अनुमान है और दरों के आधार पर इसमें उतार-चढ़ाव हो सकता है।", "amount_is_estimate" : "प्राप्त राशि एक अनुमान है", "powered_by" : "द्वारा संचालित ${title}", "error" : "त्रुटि", diff --git a/res/values/strings_ja.arb b/res/values/strings_ja.arb index e6197f9de..74ef68c79 100644 --- a/res/values/strings_ja.arb +++ b/res/values/strings_ja.arb @@ -63,9 +63,9 @@ "clear" : "クリア", "refund_address" : "払い戻し住所", "change_exchange_provider" : "Exchangeプロバイダーの変更", - "you_will_send" : "送ります", - "you_will_get" : "あなたが取得します", - "amount_is_guaranteed" : "XMRを入力すると、受け取った金額が見積もられます。 BTC金額を入力すると、受け取った金額が保証されます", + "you_will_send" : "から変換", + "you_will_get" : "に変換", + "amount_is_guaranteed" : "重要:\n保証された金額のBTCを受け取りたい場合は、その金額を[BTC]フィールドに入力してください。 代わりにXMR金額を入力した場合、受け取ったBTC金額は見積もりであり、レートに応じて変動する可能性があります。", "amount_is_estimate" : "受け取り金額は見積もりです", "powered_by" : "搭載 ${title}", "error" : "エラー", diff --git a/res/values/strings_ko.arb b/res/values/strings_ko.arb index a6c67f803..1f259795d 100644 --- a/res/values/strings_ko.arb +++ b/res/values/strings_ko.arb @@ -63,9 +63,9 @@ "clear" : "명확한", "refund_address" : "환불 주소", "change_exchange_provider" : "교환 공급자 변경", - "you_will_send" : "보내드립니다", - "you_will_get" : "당신은 얻을 것이다", - "amount_is_guaranteed" : "XMR을 입력하면받은 금액보다 추정됩니다. BTC 금액을 입력하면 수령 한 금액이 보장됩니다.", + "you_will_send" : "다음에서 변환", + "you_will_get" : "로 변환하다", + "amount_is_guaranteed" : "중대한:\n보장 된 BTC 금액을 받으려면 BTC 필드에 해당 금액을 입력하십시오. 대신 XMR 금액을 입력하면 수령 한 BTC 금액이 추정치이며 요율에 따라 변동될 수 있습니다.", "amount_is_estimate" : "수신 금액은 견적입니다", "powered_by" : "에 의해 구동 ${title}", "error" : "오류", diff --git a/res/values/strings_nl.arb b/res/values/strings_nl.arb index 1ebba301b..11e4260c1 100644 --- a/res/values/strings_nl.arb +++ b/res/values/strings_nl.arb @@ -63,9 +63,9 @@ "clear" : "Duidelijk", "refund_address" : "Adres voor terugbetaling", "change_exchange_provider" : "Wijzig Exchange Provider", - "you_will_send" : "Je zal versturen", - "you_will_get" : "Je zult krijgen", - "amount_is_guaranteed" : "Als u een XMR invoert, wordt het ontvangen bedrag geschat. Als u een BTC-bedrag invoert, is uw ontvangen bedrag gegarandeerd", + "you_will_send" : "Converteren van", + "you_will_get" : "Converteren naar", + "amount_is_guaranteed" : "BELANGRIJK:\nAls u een gegarandeerd bedrag aan BTC wilt ontvangen, voert u dat bedrag in het BTC-veld in. Als u in plaats daarvan een XMR-bedrag invoert, is het ontvangen BTC-bedrag een schatting en kan het fluctueren afhankelijk van de tarieven.", "amount_is_estimate" : "Het ontvangen bedrag is een schatting", "powered_by" : "Aangedreven door ${title}", "error" : "Fout", diff --git a/res/values/strings_pl.arb b/res/values/strings_pl.arb index fa92603dd..fc9f25ba1 100644 --- a/res/values/strings_pl.arb +++ b/res/values/strings_pl.arb @@ -63,9 +63,9 @@ "clear" : "Wyczyść", "refund_address" : "Adres zwrotu", "change_exchange_provider" : "Zmień dostawcę programu Exchange", - "you_will_send" : "Wyślesz", - "you_will_get" : "Dostaniesz", - "amount_is_guaranteed" : "Jeśli wprowadzisz XMR, kwota otrzymana zostanie oszacowana. Jeśli wpiszesz kwotę BTC, Twoja otrzymana kwota jest gwarantowana", + "you_will_send" : "Konwertuj z", + "you_will_get" : "Konwertuj na", + "amount_is_guaranteed" : "WAŻNY:\nJeśli chcesz otrzymać gwarantowaną kwotę BTC, wprowadź tę kwotę w polu BTC. Jeśli zamiast tego wpiszesz kwotę XMR, otrzymana kwota BTC jest szacunkowa i może się zmieniać w zależności od stawek.", "amount_is_estimate" : "Otrzymana kwota jest wartością szacunkową", "powered_by" : "Zasilany przez ${title}", "error" : "Błąd", diff --git a/res/values/strings_pt.arb b/res/values/strings_pt.arb index 28c7188ff..139a34923 100644 --- a/res/values/strings_pt.arb +++ b/res/values/strings_pt.arb @@ -63,9 +63,9 @@ "clear" : "Limpar", "refund_address" : "Endereço de reembolso", "change_exchange_provider" : "Alterar o provedor de troca", - "you_will_send" : "Você enviará", - "you_will_get" : "Você receberá", - "amount_is_guaranteed" : "Se você inserir um XMR, o valor recebido será estimado. Se você inserir um valor BTC, o valor recebido é garantido", + "you_will_send" : "Converter de", + "you_will_get" : "Converter para", + "amount_is_guaranteed" : "IMPORTANTE:\nSe você deseja receber um valor garantido de BTC, insira esse valor no campo BTC. Se, em vez disso, você inserir um valor XMR, o valor BTC recebido é uma estimativa e pode flutuar dependendo das taxas.", "amount_is_estimate" : "O valor a ser recebido informado acima é uma estimativa", "powered_by" : "Troca realizada por ${title}", "error" : "Erro", diff --git a/res/values/strings_ru.arb b/res/values/strings_ru.arb index 4db943f32..624044a0e 100644 --- a/res/values/strings_ru.arb +++ b/res/values/strings_ru.arb @@ -63,9 +63,9 @@ "clear" : "Очистить", "refund_address" : "Адрес возврата", "change_exchange_provider" : "Изменить провайдера обмена", - "you_will_send" : "Вы отправите", - "you_will_get" : "Вы получите", - "amount_is_guaranteed" : "Если вы введете величину XMR, то сумма получения будет приблизительной. Если вы введете величину BTC, то сумма получения гарантирована", + "you_will_send" : "Конвертировать из", + "you_will_get" : "Конвертировать в", + "amount_is_guaranteed" : "ВАЖНО:\nЕсли вы хотите получить гарантированную сумму BTC, введите эту сумму в поле BTC. Если вместо этого вы вводите сумму XMR, полученная сумма BTC является приблизительной и может колебаться в зависимости от курса.", "amount_is_estimate" : "Полученная сумма является приблизительной", "powered_by" : "Используя ${title}", "error" : "Ошибка", diff --git a/res/values/strings_uk.arb b/res/values/strings_uk.arb index 62a1645e8..22c2bb02e 100644 --- a/res/values/strings_uk.arb +++ b/res/values/strings_uk.arb @@ -63,9 +63,9 @@ "clear" : "Очистити", "refund_address" : "Адреса повернення коштів", "change_exchange_provider" : "Змінити провайдера обміну", - "you_will_send" : "Ви відправите", - "you_will_get" : "Ви отримаєте", - "amount_is_guaranteed" : "Якщо ви введете величину XMR, то сума отримання буде приблизною. Якщо ви введете величину BTC, то сума отримання гарантована", + "you_will_send" : "Конвертувати з", + "you_will_get" : "Конвертувати в", + "amount_is_guaranteed" : "ВАЖЛИВО:\nЯкщо ви хочете отримати гарантовану суму BTC, введіть цю суму в поле BTC. Якщо замість цього ввести суму XMR, отримана сума BTC є приблизною і може коливатися залежно від курсу.", "amount_is_estimate" : "Отримана сума є приблизною", "powered_by" : "Використовуючи ${title}", "error" : "Помилка", diff --git a/res/values/strings_zh.arb b/res/values/strings_zh.arb index 487392d10..a551bb4d6 100644 --- a/res/values/strings_zh.arb +++ b/res/values/strings_zh.arb @@ -63,9 +63,9 @@ "clear" : "明确", "refund_address" : "退款地址", "change_exchange_provider" : "更改交易所提供商", - "you_will_send" : "您将发送", - "you_will_get" : "你会得到", - "amount_is_guaranteed" : "如果輸入XMR,則將估算收到的金額。 如果您輸入BTC金額,則可以保證收到的金額", + "you_will_send" : "從轉換", + "you_will_get" : "轉換成", + "amount_is_guaranteed" : "重要:\n如果您想獲得保證的BTC金額,請在BTC字段中輸入該金額。 如果您輸入的是XMR金額,則收到的BTC金額只是估算值,可能會隨匯率而波動。", "amount_is_estimate" : "收款金额为估算值", "powered_by" : "供电 ${title}", "error" : "错误", From 68fa60954d35ccc48478b89ed311ac412bf38984 Mon Sep 17 00:00:00 2001 From: Oleksandr Sobol Date: Mon, 2 Nov 2020 18:11:51 +0200 Subject: [PATCH 20/58] CAKE-145 | changed twitter link and name on the settings page; changed text on the rescan page; changed reconnect alert text; changed button color on create account and create new subaddress pages; changed title of create new subaddress page --- lib/generated/i18n.dart | 50 +++++++++---------- .../monero_account_edit_or_create_page.dart | 2 +- .../address_edit_or_create_page.dart | 2 +- .../settings/settings_view_model.dart | 4 +- res/values/strings_de.arb | 4 +- res/values/strings_en.arb | 6 +-- res/values/strings_es.arb | 4 +- res/values/strings_hi.arb | 4 +- res/values/strings_ja.arb | 4 +- res/values/strings_ko.arb | 4 +- res/values/strings_nl.arb | 4 +- res/values/strings_pl.arb | 4 +- res/values/strings_pt.arb | 4 +- res/values/strings_ru.arb | 4 +- res/values/strings_uk.arb | 4 +- res/values/strings_zh.arb | 4 +- 16 files changed, 54 insertions(+), 54 deletions(-) diff --git a/lib/generated/i18n.dart b/lib/generated/i18n.dart index 7af906ef9..88ba97c80 100644 --- a/lib/generated/i18n.dart +++ b/lib/generated/i18n.dart @@ -109,7 +109,7 @@ class S implements WidgetsLocalizations { String get login => "Login"; String get new_subaddress_create => "Create"; String get new_subaddress_label_name => "Label name"; - String get new_subaddress_title => "New subaddress"; + String get new_subaddress_title => "New address"; String get new_wallet => "New Wallet"; String get node_address => "Node Address"; String get node_new => "New Node"; @@ -138,7 +138,7 @@ class S implements WidgetsLocalizations { String get receive_amount => "Amount"; String get received => "Received"; String get reconnect => "Reconnect"; - String get reconnect_alert_text => "Are you sure to reconnect?"; + String get reconnect_alert_text => "Are you sure you want to reconnect?"; String get reconnection => "Reconnection"; String get refund_address => "Refund address"; String get remove => "Remove"; @@ -156,7 +156,7 @@ class S implements WidgetsLocalizations { String get restore_description_from_keys => "Restore your wallet from generated keystrokes saved from your private keys"; String get restore_description_from_seed => "Restore your wallet from either the 25 word or 13 word combination code"; String get restore_description_from_seed_keys => "Get back your wallet from seed/keys that you've saved to secure place"; - String get restore_from_date_or_blockheight => "Please enter the date you created this wallet. Or if you know the blockheight, please enter it instead"; + String get restore_from_date_or_blockheight => "Please enter a date a few days before you created this wallet. Or if you know the blockheight, please enter it instead"; String get restore_from_seed_placeholder => "Please enter or paste your seed here"; String get restore_new_seed => "New seed"; String get restore_next => "Next"; @@ -767,7 +767,7 @@ class $de extends S { @override String get exchange_result_write_down_trade_id => "Bitte kopieren oder notieren Sie die Handel-ID, um fortzufahren."; @override - String get new_subaddress_title => "Neue Unteradresse"; + String get new_subaddress_title => "Neue Adresse"; @override String get change => "Veränderung"; @override @@ -821,7 +821,7 @@ class $de extends S { @override String get choose_account => "Konto auswählen"; @override - String get restore_from_date_or_blockheight => "Bitte geben Sie das Datum ein, an dem Sie diese Brieftasche erstellt haben. Oder wenn Sie die Blockhöhe kennen, geben Sie sie stattdessen ein"; + String get restore_from_date_or_blockheight => "Bitte geben Sie einige Tage vor dem Erstellen dieser Brieftasche ein Datum ein. Oder wenn Sie die Blockhöhe kennen, geben Sie sie stattdessen ein"; @override String get settings_only_trades => "Nur Trades"; @override @@ -1433,7 +1433,7 @@ class $hi extends S { @override String get exchange_result_write_down_trade_id => "जारी रखने के लिए कृपया ट्रेड ID की प्रतिलिपि बनाएँ या लिखें."; @override - String get new_subaddress_title => "नई उपशादी"; + String get new_subaddress_title => "नया पता"; @override String get change => "परिवर्तन"; @override @@ -1487,7 +1487,7 @@ class $hi extends S { @override String get choose_account => "खाता चुनें"; @override - String get restore_from_date_or_blockheight => "कृपया इस वॉलेट को बनाने की तिथि दर्ज करें। या यदि आप ब्लॉकचाइट जानते हैं, तो कृपया इसके बजाय इसे दर्ज करें"; + String get restore_from_date_or_blockheight => "कृपया इस वॉलेट को बनाने से कुछ दिन पहले एक तारीख दर्ज करें। या यदि आप ब्लॉकचेट जानते हैं, तो कृपया इसके बजाय इसे दर्ज करें"; @override String get settings_only_trades => "केवल ट्रेड करता है"; @override @@ -2099,7 +2099,7 @@ class $ru extends S { @override String get exchange_result_write_down_trade_id => "Пожалуйста, скопируйте или запишите ID сделки."; @override - String get new_subaddress_title => "Новый субадрес"; + String get new_subaddress_title => "Новый адрес"; @override String get change => "Изменить"; @override @@ -2153,7 +2153,7 @@ class $ru extends S { @override String get choose_account => "Выберите аккаунт"; @override - String get restore_from_date_or_blockheight => "Пожалуйста, введите дату создания кошелька. Или, если вы знаете высоту блока, введите ее значение"; + String get restore_from_date_or_blockheight => "Пожалуйста, введите дату за несколько дней до создания этого кошелька. Или, если вы знаете высоту блока, введите ее значение"; @override String get settings_only_trades => "Сделки"; @override @@ -2765,7 +2765,7 @@ class $ko extends S { @override String get exchange_result_write_down_trade_id => "계속하려면 거래 ID를 복사하거나 적어 두십시오.."; @override - String get new_subaddress_title => "새로운 하위 주소"; + String get new_subaddress_title => "새 주소"; @override String get change => "변화"; @override @@ -2819,7 +2819,7 @@ class $ko extends S { @override String get choose_account => "계정을 선택하십시오"; @override - String get restore_from_date_or_blockheight => "이 지갑을 만든 날짜를 입력하세요. 또는 블록 높이를 알고있는 경우 대신 입력하십시오."; + String get restore_from_date_or_blockheight => "이 지갑을 생성하기 며칠 전에 날짜를 입력하십시오. 또는 블록 높이를 알고있는 경우 대신 입력하십시오."; @override String get settings_only_trades => "거래 만"; @override @@ -3431,7 +3431,7 @@ class $pt extends S { @override String get exchange_result_write_down_trade_id => "Copie ou anote o ID da troca para continuar."; @override - String get new_subaddress_title => "Criar sub-endereço"; + String get new_subaddress_title => "Novo endereço"; @override String get change => "Mudar"; @override @@ -3485,7 +3485,7 @@ class $pt extends S { @override String get choose_account => "Escolha uma conta"; @override - String get restore_from_date_or_blockheight => "Por favor, insira a data em que você criou esta carteira. Ou se você souber a altura do bloco, insira-o"; + String get restore_from_date_or_blockheight => "Insira uma data alguns dias antes de criar esta carteira. Ou se você souber a altura do bloco, insira-o"; @override String get settings_only_trades => "Somente trocas"; @override @@ -4097,7 +4097,7 @@ class $uk extends S { @override String get exchange_result_write_down_trade_id => "Будь ласка, скопіюйте або запишіть ID операції."; @override - String get new_subaddress_title => "Нова субадреса"; + String get new_subaddress_title => "Нова адреса"; @override String get change => "Змінити"; @override @@ -4151,7 +4151,7 @@ class $uk extends S { @override String get choose_account => "Оберіть акаунт"; @override - String get restore_from_date_or_blockheight => "Будь ласка, введіть дату створення гаманця. Або, якщо ви знаєте висоту блоку, введіть її значення"; + String get restore_from_date_or_blockheight => "Будь ласка, введіть дату за кілька днів до створення цього гаманця. Або, якщо ви знаєте висоту блоку, введіть її значення"; @override String get settings_only_trades => "Операції"; @override @@ -4763,7 +4763,7 @@ class $ja extends S { @override String get exchange_result_write_down_trade_id => "続行するには、取引IDをコピーまたは書き留めてください."; @override - String get new_subaddress_title => "新しいサブアドレス"; + String get new_subaddress_title => "新しいアドレス"; @override String get change => "変化する"; @override @@ -4817,7 +4817,7 @@ class $ja extends S { @override String get choose_account => "アカウントを選択"; @override - String get restore_from_date_or_blockheight => "このウォレットを作成した日付を入力してください。 または、ブロックの高さがわかっている場合は、代わりに入力してください"; + String get restore_from_date_or_blockheight => "このウォレットを作成する数日前に日付を入力してください。 または、ブロックの高さがわかっている場合は、代わりに入力してください"; @override String get settings_only_trades => "取引のみ"; @override @@ -5433,7 +5433,7 @@ class $pl extends S { @override String get exchange_result_write_down_trade_id => "Skopiuj lub zanotuj identyfikator transakcji, aby kontynuować."; @override - String get new_subaddress_title => "Nowy podadres"; + String get new_subaddress_title => "Nowy adres"; @override String get change => "Zmiana"; @override @@ -5487,7 +5487,7 @@ class $pl extends S { @override String get choose_account => "Wybierz konto"; @override - String get restore_from_date_or_blockheight => "Wprowadź datę utworzenia tego portfela. Lub jeśli znasz wysokość bloku, wprowadź go zamiast tego"; + String get restore_from_date_or_blockheight => "Wprowadź datę na kilka dni przed utworzeniem tego portfela. Lub jeśli znasz wysokość bloku, wprowadź go zamiast tego"; @override String get settings_only_trades => "Tylko transakcje"; @override @@ -6099,7 +6099,7 @@ class $es extends S { @override String get exchange_result_write_down_trade_id => "Por favor, copia o escribe el ID."; @override - String get new_subaddress_title => "Nueva subdirección"; + String get new_subaddress_title => "Nueva direccion"; @override String get change => "Cambio"; @override @@ -6153,7 +6153,7 @@ class $es extends S { @override String get choose_account => "Elegir cuenta"; @override - String get restore_from_date_or_blockheight => "Ingrese la fecha en que creó esta billetera. O si conoce la altura del bloque, ingréselo en su lugar"; + String get restore_from_date_or_blockheight => "Ingrese una fecha unos días antes de crear esta billetera. O si conoce la altura del bloque, ingréselo en su lugar"; @override String get settings_only_trades => "Solo comercia"; @override @@ -6765,7 +6765,7 @@ class $nl extends S { @override String get exchange_result_write_down_trade_id => "Kopieer of noteer de handels-ID om door te gaan."; @override - String get new_subaddress_title => "Nieuw subadres"; + String get new_subaddress_title => "Nieuw adres"; @override String get change => "Verandering"; @override @@ -6819,7 +6819,7 @@ class $nl extends S { @override String get choose_account => "Kies account"; @override - String get restore_from_date_or_blockheight => "Voer de datum in waarop u deze portemonnee heeft gemaakt. Of als u de blokhoogte kent, voer deze dan in"; + String get restore_from_date_or_blockheight => "Voer een datum in een paar dagen voordat u deze portemonnee heeft gemaakt. Of als u de blokhoogte kent, voert u deze in"; @override String get settings_only_trades => "Alleen handel"; @override @@ -7431,7 +7431,7 @@ class $zh extends S { @override String get exchange_result_write_down_trade_id => "请复制或写下交易编号以继续."; @override - String get new_subaddress_title => "新子地址"; + String get new_subaddress_title => "新地址"; @override String get change => "更改"; @override @@ -7485,7 +7485,7 @@ class $zh extends S { @override String get choose_account => "選擇帳號"; @override - String get restore_from_date_or_blockheight => "請輸入創建此錢包的日期。 或者,如果您知道塊高,請改為輸入"; + String get restore_from_date_or_blockheight => "請在創建此錢包之前幾天輸入一個日期。 或者,如果您知道塊高,請改為輸入"; @override String get settings_only_trades => "只交易"; @override diff --git a/lib/src/screens/monero_accounts/monero_account_edit_or_create_page.dart b/lib/src/screens/monero_accounts/monero_account_edit_or_create_page.dart index 002b264ba..af0d9b04b 100644 --- a/lib/src/screens/monero_accounts/monero_account_edit_or_create_page.dart +++ b/lib/src/screens/monero_accounts/monero_account_edit_or_create_page.dart @@ -56,7 +56,7 @@ class MoneroAccountEditOrCreatePage extends BasePage { text: moneroAccountCreationViewModel.isEdit ? S.of(context).rename : S.of(context).add, - color: Colors.green, + color: Theme.of(context).accentTextTheme.body2.color, textColor: Colors.white, isLoading: moneroAccountCreationViewModel.state is IsExecutingState, diff --git a/lib/src/screens/subaddress/address_edit_or_create_page.dart b/lib/src/screens/subaddress/address_edit_or_create_page.dart index 84c492196..b64101c7a 100644 --- a/lib/src/screens/subaddress/address_edit_or_create_page.dart +++ b/lib/src/screens/subaddress/address_edit_or_create_page.dart @@ -60,7 +60,7 @@ class AddressEditOrCreatePage extends BasePage { text: addressEditOrCreateViewModel.isEdit ? S.of(context).rename : S.of(context).new_subaddress_create, - color: Colors.green, + color: Theme.of(context).accentTextTheme.body2.color, textColor: Colors.white, isLoading: addressEditOrCreateViewModel.state is AddressIsSaving, diff --git a/lib/view_model/settings/settings_view_model.dart b/lib/view_model/settings/settings_view_model.dart index 6711a222b..a3ae7a0aa 100644 --- a/lib/view_model/settings/settings_view_model.dart +++ b/lib/view_model/settings/settings_view_model.dart @@ -125,8 +125,8 @@ abstract class SettingsViewModelBase with Store { LinkListItem( title: 'Twitter', icon: 'assets/images/Twitter.png', - linkTitle: '@CakeWalletXMR', - link: 'https:twitter.com/CakewalletXMR'), + linkTitle: '@cakewallet', + link: 'https://twitter.com/cakewallet'), LinkListItem( title: 'ChangeNow', icon: 'assets/images/change_now.png', diff --git a/res/values/strings_de.arb b/res/values/strings_de.arb index 63e2edbad..98f3609b2 100644 --- a/res/values/strings_de.arb +++ b/res/values/strings_de.arb @@ -168,7 +168,7 @@ "restore_bitcoin_description_from_seed" : "Stellen Sie Ihre Brieftasche aus dem 12-Wort-Kombinationscode wieder her", "restore_bitcoin_description_from_keys" : "Stellen Sie Ihre Brieftasche aus der generierten WIF-Zeichenfolge aus Ihren privaten Schlüsseln wieder her", "restore_bitcoin_title_from_keys" : "Aus WIF wiederherstellen", - "restore_from_date_or_blockheight" : "Bitte geben Sie das Datum ein, an dem Sie diese Brieftasche erstellt haben. Oder wenn Sie die Blockhöhe kennen, geben Sie sie stattdessen ein", + "restore_from_date_or_blockheight" : "Bitte geben Sie einige Tage vor dem Erstellen dieser Brieftasche ein Datum ein. Oder wenn Sie die Blockhöhe kennen, geben Sie sie stattdessen ein", "seed_reminder" : "Bitte notieren Sie diese, falls Sie Ihr Telefon verlieren oder abwischen", @@ -251,7 +251,7 @@ "copied_key_to_clipboard" : "Kopiert ${key} Zur Zwischenablage", - "new_subaddress_title" : "Neue Unteradresse", + "new_subaddress_title" : "Neue Adresse", "new_subaddress_label_name" : "Markenname", "new_subaddress_create" : "Erstellen", diff --git a/res/values/strings_en.arb b/res/values/strings_en.arb index 8ac4c8779..a3a664b94 100644 --- a/res/values/strings_en.arb +++ b/res/values/strings_en.arb @@ -56,7 +56,7 @@ "show_keys" : "Show seed/keys", "address_book_menu" : "Address book", "reconnection" : "Reconnection", - "reconnect_alert_text" : "Are you sure to reconnect?", + "reconnect_alert_text" : "Are you sure you want to reconnect?", "exchange" : "Exchange", @@ -168,7 +168,7 @@ "restore_bitcoin_description_from_seed" : "Restore your wallet from 12 word combination code", "restore_bitcoin_description_from_keys" : "Restore your wallet from generated WIF string from your private keys", "restore_bitcoin_title_from_keys" : "Restore from WIF", - "restore_from_date_or_blockheight" : "Please enter the date you created this wallet. Or if you know the blockheight, please enter it instead", + "restore_from_date_or_blockheight" : "Please enter a date a few days before you created this wallet. Or if you know the blockheight, please enter it instead", "seed_reminder" : "Please write these down in case you lose or wipe your phone", @@ -251,7 +251,7 @@ "copied_key_to_clipboard" : "Copied ${key} to Clipboard", - "new_subaddress_title" : "New subaddress", + "new_subaddress_title" : "New address", "new_subaddress_label_name" : "Label name", "new_subaddress_create" : "Create", diff --git a/res/values/strings_es.arb b/res/values/strings_es.arb index 94c86e900..a1645e556 100644 --- a/res/values/strings_es.arb +++ b/res/values/strings_es.arb @@ -168,7 +168,7 @@ "restore_bitcoin_description_from_seed" : "Restaure su billetera a partir del código de combinación de 12 palabras", "restore_bitcoin_description_from_keys" : "Restaure su billetera a partir de una cadena WIF generada a partir de sus claves privadas", "restore_bitcoin_title_from_keys" : "Restaurar desde WIF", - "restore_from_date_or_blockheight" : "Ingrese la fecha en que creó esta billetera. O si conoce la altura del bloque, ingréselo en su lugar", + "restore_from_date_or_blockheight" : "Ingrese una fecha unos días antes de crear esta billetera. O si conoce la altura del bloque, ingréselo en su lugar", "seed_reminder" : "Anótelos en caso de que pierda o borre su teléfono", @@ -251,7 +251,7 @@ "copied_key_to_clipboard" : "Copiado ${key} al portapapeles", - "new_subaddress_title" : "Nueva subdirección", + "new_subaddress_title" : "Nueva direccion", "new_subaddress_label_name" : "Nombre de etiqueta", "new_subaddress_create" : "Crear", diff --git a/res/values/strings_hi.arb b/res/values/strings_hi.arb index 0dbe61c47..29de36ef3 100644 --- a/res/values/strings_hi.arb +++ b/res/values/strings_hi.arb @@ -168,7 +168,7 @@ "restore_bitcoin_description_from_seed" : "12 शब्द संयोजन कोड से अपने वॉलेट को पुनर्स्थापित करें", "restore_bitcoin_description_from_keys" : "अपने निजी कुंजी से उत्पन्न WIF स्ट्रिंग से अपने वॉलेट को पुनर्स्थापित करें", "restore_bitcoin_title_from_keys" : "WIF से पुनर्स्थापित करें", - "restore_from_date_or_blockheight" : "कृपया इस वॉलेट को बनाने की तिथि दर्ज करें। या यदि आप ब्लॉकचाइट जानते हैं, तो कृपया इसके बजाय इसे दर्ज करें", + "restore_from_date_or_blockheight" : "कृपया इस वॉलेट को बनाने से कुछ दिन पहले एक तारीख दर्ज करें। या यदि आप ब्लॉकचेट जानते हैं, तो कृपया इसके बजाय इसे दर्ज करें", "seed_reminder" : "यदि आप अपना फोन खो देते हैं या मिटा देते हैं तो कृपया इन्हें लिख लें", @@ -251,7 +251,7 @@ "copied_key_to_clipboard" : "की नकल की ${key} क्लिपबोर्ड पर", - "new_subaddress_title" : "नई उपशादी", + "new_subaddress_title" : "नया पता", "new_subaddress_label_name" : "लेबल का नाम", "new_subaddress_create" : "सर्जन करना", diff --git a/res/values/strings_ja.arb b/res/values/strings_ja.arb index e6197f9de..ce3c40330 100644 --- a/res/values/strings_ja.arb +++ b/res/values/strings_ja.arb @@ -168,7 +168,7 @@ "restore_bitcoin_description_from_seed" : "12ワードの組み合わせコードからウォレットを復元する", "restore_bitcoin_description_from_keys" : "秘密鍵から生成されたWIF文字列からウォレットを復元します", "restore_bitcoin_title_from_keys" : "WIFから復元", - "restore_from_date_or_blockheight" : "このウォレットを作成した日付を入力してください。 または、ブロックの高さがわかっている場合は、代わりに入力してください", + "restore_from_date_or_blockheight" : "このウォレットを作成する数日前に日付を入力してください。 または、ブロックの高さがわかっている場合は、代わりに入力してください", "seed_reminder" : "スマートフォンを紛失したりワイプした場合に備えて、これらを書き留めてください", @@ -251,7 +251,7 @@ "copied_key_to_clipboard" : "コピー済み ${key} クリップボードへ", - "new_subaddress_title" : "新しいサブアドレス", + "new_subaddress_title" : "新しいアドレス", "new_subaddress_label_name" : "ラベル名", "new_subaddress_create" : "作成する", diff --git a/res/values/strings_ko.arb b/res/values/strings_ko.arb index a6c67f803..c5c0000ef 100644 --- a/res/values/strings_ko.arb +++ b/res/values/strings_ko.arb @@ -168,7 +168,7 @@ "restore_bitcoin_description_from_seed" : "12 단어 조합 코드에서 지갑 복원", "restore_bitcoin_description_from_keys" : "개인 키에서 생성 된 WIF 문자열에서 지갑 복원", "restore_bitcoin_title_from_keys" : "WIF에서 복원", - "restore_from_date_or_blockheight" : "이 지갑을 만든 날짜를 입력하세요. 또는 블록 높이를 알고있는 경우 대신 입력하십시오.", + "restore_from_date_or_blockheight" : "이 지갑을 생성하기 며칠 전에 날짜를 입력하십시오. 또는 블록 높이를 알고있는 경우 대신 입력하십시오.", "seed_reminder" : "휴대 전화를 분실하거나 닦을 경우를 대비해 적어 두세요.", @@ -251,7 +251,7 @@ "copied_key_to_clipboard" : "복사 ${key} 클립 보드로", - "new_subaddress_title" : "새로운 하위 주소", + "new_subaddress_title" : "새 주소", "new_subaddress_label_name" : "라벨 이름", "new_subaddress_create" : "몹시 떠들어 대다", diff --git a/res/values/strings_nl.arb b/res/values/strings_nl.arb index 1ebba301b..142471ca9 100644 --- a/res/values/strings_nl.arb +++ b/res/values/strings_nl.arb @@ -168,7 +168,7 @@ "restore_bitcoin_description_from_seed" : "Herstel uw portemonnee met een combinatiecode van 12 woorden", "restore_bitcoin_description_from_keys" : "Herstel uw portemonnee van de gegenereerde WIF-string van uw privésleutels", "restore_bitcoin_title_from_keys" : "Herstel van WIF", - "restore_from_date_or_blockheight" : "Voer de datum in waarop u deze portemonnee heeft gemaakt. Of als u de blokhoogte kent, voer deze dan in", + "restore_from_date_or_blockheight" : "Voer een datum in een paar dagen voordat u deze portemonnee heeft gemaakt. Of als u de blokhoogte kent, voert u deze in", "seed_reminder" : "Schrijf deze op voor het geval u uw telefoon kwijtraakt of veegt", @@ -251,7 +251,7 @@ "copied_key_to_clipboard" : "Gekopieerd ${key} naar het klembord", - "new_subaddress_title" : "Nieuw subadres", + "new_subaddress_title" : "Nieuw adres", "new_subaddress_label_name" : "Label naam", "new_subaddress_create" : "Creëren", diff --git a/res/values/strings_pl.arb b/res/values/strings_pl.arb index fa92603dd..c3f89eaac 100644 --- a/res/values/strings_pl.arb +++ b/res/values/strings_pl.arb @@ -168,7 +168,7 @@ "restore_bitcoin_description_from_seed" : "Przywróć swój portfel z kodu złożonego z 12 słów", "restore_bitcoin_description_from_keys" : "Przywróć swój portfel z wygenerowanego ciągu WIF z kluczy prywatnych", "restore_bitcoin_title_from_keys" : "Przywróć z WIF", - "restore_from_date_or_blockheight" : "Wprowadź datę utworzenia tego portfela. Lub jeśli znasz wysokość bloku, wprowadź go zamiast tego", + "restore_from_date_or_blockheight" : "Wprowadź datę na kilka dni przed utworzeniem tego portfela. Lub jeśli znasz wysokość bloku, wprowadź go zamiast tego", "seed_reminder" : "Zapisz je na wypadek zgubienia lub wyczyszczenia telefonu", @@ -251,7 +251,7 @@ "copied_key_to_clipboard" : "Skopiowane ${key} do schowka", - "new_subaddress_title" : "Nowy podadres", + "new_subaddress_title" : "Nowy adres", "new_subaddress_label_name" : "Nazwa etykiety", "new_subaddress_create" : "Stwórz", diff --git a/res/values/strings_pt.arb b/res/values/strings_pt.arb index 28c7188ff..e84b268a2 100644 --- a/res/values/strings_pt.arb +++ b/res/values/strings_pt.arb @@ -168,7 +168,7 @@ "restore_bitcoin_description_from_seed" : "Restaure sua carteira a partir de um código de combinação de 12 palavras", "restore_bitcoin_description_from_keys" : "Restaure sua carteira a partir da string WIF gerada de suas chaves privadas", "restore_bitcoin_title_from_keys" : "Restaurar de WIF", - "restore_from_date_or_blockheight" : "Por favor, insira a data em que você criou esta carteira. Ou se você souber a altura do bloco, insira-o", + "restore_from_date_or_blockheight" : "Insira uma data alguns dias antes de criar esta carteira. Ou se você souber a altura do bloco, insira-o", "seed_reminder" : "Anote-os para o caso de perder ou limpar seu telefone", @@ -251,7 +251,7 @@ "copied_key_to_clipboard" : "${key} copiada para a área de transferência", - "new_subaddress_title" : "Criar sub-endereço", + "new_subaddress_title" : "Novo endereço", "new_subaddress_label_name" : "Nome", "new_subaddress_create" : "Criar", diff --git a/res/values/strings_ru.arb b/res/values/strings_ru.arb index 4db943f32..3d6bca244 100644 --- a/res/values/strings_ru.arb +++ b/res/values/strings_ru.arb @@ -168,7 +168,7 @@ "restore_bitcoin_description_from_seed" : "Вы можете восстановить кошелёк используя 12-ти значную мнемоническую фразу", "restore_bitcoin_description_from_keys" : "Вы можете восстановить кошелёк с помощью WIF", "restore_bitcoin_title_from_keys" : "Восстановить с помощью WIF", - "restore_from_date_or_blockheight" : "Пожалуйста, введите дату создания кошелька. Или, если вы знаете высоту блока, введите ее значение", + "restore_from_date_or_blockheight" : "Пожалуйста, введите дату за несколько дней до создания этого кошелька. Или, если вы знаете высоту блока, введите ее значение", "seed_reminder" : "Пожалуйста, запишите мнемоническую фразу на случай потери или очистки телефона", @@ -251,7 +251,7 @@ "copied_key_to_clipboard" : "Скопировано ${key} в буфер обмена", - "new_subaddress_title" : "Новый субадрес", + "new_subaddress_title" : "Новый адрес", "new_subaddress_label_name" : "Имя", "new_subaddress_create" : "Создать", diff --git a/res/values/strings_uk.arb b/res/values/strings_uk.arb index 62a1645e8..d2da41b5f 100644 --- a/res/values/strings_uk.arb +++ b/res/values/strings_uk.arb @@ -168,7 +168,7 @@ "restore_bitcoin_description_from_seed" : "Ви можете відновити гаманець використовуючи 12-ти слівну мнемонічну фразу", "restore_bitcoin_description_from_keys" : "Ви можете відновити гаманець за допомогою WIF", "restore_bitcoin_title_from_keys" : "Відновити за допомогою WIF", - "restore_from_date_or_blockheight" : "Будь ласка, введіть дату створення гаманця. Або, якщо ви знаєте висоту блоку, введіть її значення", + "restore_from_date_or_blockheight" : "Будь ласка, введіть дату за кілька днів до створення цього гаманця. Або, якщо ви знаєте висоту блоку, введіть її значення", "seed_reminder" : "Будь ласка, запишіть мнемонічну фразу на випадок втрати або очищення телефону", @@ -251,7 +251,7 @@ "copied_key_to_clipboard" : "Скопійовано ${key} в буфер обміну", - "new_subaddress_title" : "Нова субадреса", + "new_subaddress_title" : "Нова адреса", "new_subaddress_label_name" : "Ім'я", "new_subaddress_create" : "Створити", diff --git a/res/values/strings_zh.arb b/res/values/strings_zh.arb index 487392d10..62f9d4152 100644 --- a/res/values/strings_zh.arb +++ b/res/values/strings_zh.arb @@ -168,7 +168,7 @@ "restore_bitcoin_description_from_seed" : "從12個單詞的組合碼恢復您的錢包", "restore_bitcoin_description_from_keys" : "從私鑰中生成的WIF字符串還原您的錢包", "restore_bitcoin_title_from_keys" : "從WIF還原", - "restore_from_date_or_blockheight" : "請輸入創建此錢包的日期。 或者,如果您知道塊高,請改為輸入", + "restore_from_date_or_blockheight" : "請在創建此錢包之前幾天輸入一個日期。 或者,如果您知道塊高,請改為輸入", "seed_reminder" : "請寫下這些,以防丟失或擦拭手機", @@ -251,7 +251,7 @@ "copied_key_to_clipboard" : "复制 ${key} 到剪贴板", - "new_subaddress_title" : "新子地址", + "new_subaddress_title" : "新地址", "new_subaddress_label_name" : "标签名称", "new_subaddress_create" : "创建", From 76581505a0b9f8175108ef40e0a202ba426c7b08 Mon Sep 17 00:00:00 2001 From: M Date: Tue, 3 Nov 2020 18:57:36 +0200 Subject: [PATCH 21/58] CAKE-149 --- cw_monero/ios/Classes/monero_api.cpp | 6 +++ cw_monero/lib/wallet.dart | 55 ++++++++++------------------ lib/monero/monero_wallet.dart | 54 ++++++++++----------------- 3 files changed, 45 insertions(+), 70 deletions(-) diff --git a/cw_monero/ios/Classes/monero_api.cpp b/cw_monero/ios/Classes/monero_api.cpp index bc653da10..4398043d0 100644 --- a/cw_monero/ios/Classes/monero_api.cpp +++ b/cw_monero/ios/Classes/monero_api.cpp @@ -373,6 +373,7 @@ extern "C" bool connect_to_node(char *error) { + nice(19); bool is_connected = get_current_wallet()->connectToDaemon(); if (!is_connected) @@ -385,6 +386,7 @@ extern "C" bool setup_node(char *address, char *login, char *password, bool use_ssl, bool is_light_wallet, char *error) { + nice(19); Monero::Wallet *wallet = get_current_wallet(); std::string _login = ""; @@ -494,6 +496,8 @@ extern "C" return committed; } + // START + uint64_t get_node_height_or_update(uint64_t base_eight) { if (m_cached_syncing_blockchain_height < base_eight) { @@ -578,6 +582,8 @@ extern "C" get_current_wallet()->setListener(m_listener); } + // END + int64_t *subaddrress_get_all() { std::vector _subaddresses = m_subaddress->getAll(); diff --git a/cw_monero/lib/wallet.dart b/cw_monero/lib/wallet.dart index 8a8731d9e..4348c8809 100644 --- a/cw_monero/lib/wallet.dart +++ b/cw_monero/lib/wallet.dart @@ -212,19 +212,16 @@ String getPublicSpendKey() => convertUTF8ToString(pointer: getPublicSpendKeyNative()); class SyncListener { - SyncListener({this.onNewBlock, this.onNeedToRefresh, this.onNewTransaction}); + SyncListener({this.onNewBlock}); void Function(int, int, double) onNewBlock; - void Function() onNeedToRefresh; - void Function() onNewTransaction; Timer _updateSyncInfoTimer; int _cachedBlockchainHeight = 0; int _lastKnownBlockHeight = 0; - int _initialSyncHeight = 0; Future getNodeHeightOrUpdate(int baseHeight) async { - if (_cachedBlockchainHeight < baseHeight) { + if (_cachedBlockchainHeight < baseHeight || _cachedBlockchainHeight == 0) { _cachedBlockchainHeight = await getNodeHeight(); } @@ -234,50 +231,36 @@ class SyncListener { void start() { _cachedBlockchainHeight = 0; _lastKnownBlockHeight = 0; - _initialSyncHeight = 0; _updateSyncInfoTimer ??= Timer.periodic(Duration(milliseconds: 1200), (_) async { - final syncHeight = getSyncingHeight(); - final needToRefresh = isNeededToRefresh(); - final newTransactionExist = isNewTransactionExist(); + var syncHeight = getSyncingHeight(); + + if (syncHeight <= 0) { + syncHeight = getCurrentHeight(); + } + final bchHeight = await getNodeHeightOrUpdate(syncHeight); - if (_lastKnownBlockHeight != syncHeight && syncHeight != null) { - if (_initialSyncHeight <= 0) { - _initialSyncHeight = syncHeight; - } - - _lastKnownBlockHeight = syncHeight; - final line = bchHeight - _initialSyncHeight; - final diff = line - (bchHeight - syncHeight); - final ptc = diff <= 0 ? 0.0 : diff / line; - final left = bchHeight - syncHeight; - // 1. Actual new height; 2. Blocks left to finish; 3. Progress in percents; - onNewBlock?.call(syncHeight, left, ptc); + if (_lastKnownBlockHeight == syncHeight || syncHeight == null) { + return; } - if (newTransactionExist) { - onNewTransaction?.call(); - } - - if (needToRefresh) { - onNeedToRefresh?.call(); - } + _lastKnownBlockHeight = syncHeight; + final track = bchHeight - syncHeight; + final diff = track - (bchHeight - syncHeight); + final ptc = diff <= 0 ? 0.0 : diff / track; + final left = bchHeight - syncHeight; + // 1. Actual new height; 2. Blocks left to finish; 3. Progress in percents; + onNewBlock?.call(syncHeight, left, ptc); }); } void stop() => _updateSyncInfoTimer?.cancel(); } -SyncListener setListeners(void Function(int, int, double) onNewBlock, - void Function() onNeedToRefresh, void Function() onNewTransaction) { - final listener = SyncListener( - onNewBlock: onNewBlock, - onNeedToRefresh: onNeedToRefresh, - onNewTransaction: onNewTransaction); - +SyncListener setListeners(void Function(int, int, double) onNewBlock) { + final listener = SyncListener(onNewBlock: onNewBlock); setListenerNative(); - return listener; } diff --git a/lib/monero/monero_wallet.dart b/lib/monero/monero_wallet.dart index 9840eb2c5..8ce53f8d1 100644 --- a/lib/monero/monero_wallet.dart +++ b/lib/monero/monero_wallet.dart @@ -95,7 +95,7 @@ abstract class MoneroWalletBase extends WalletBase with Store { address = subaddress.address; _setListeners(); await transactionHistory.update(); - + print('walletInfo.isRecovery ${walletInfo.isRecovery}'); if (walletInfo.isRecovery) { monero_wallet.setRecoveringFromSeed(isRecovery: walletInfo.isRecovery); @@ -233,8 +233,7 @@ abstract class MoneroWalletBase extends WalletBase with Store { void _setListeners() { _listener?.stop(); - _listener = monero_wallet.setListeners( - _onNewBlock, _onNeedToRefresh, _onNewTransaction); + _listener = monero_wallet.setListeners(_onNewBlock); _listener.start(); } @@ -293,43 +292,30 @@ abstract class MoneroWalletBase extends WalletBase with Store { int _getUnlockedBalance() => monero_wallet.getUnlockedBalance(accountIndex: account.id); - void _onNewBlock(int height, int blocksLeft, double ptc) => - syncStatus = SyncingSyncStatus(blocksLeft, ptc); + int _lastAutosaveTimestamp = 0; + final int _autosaveInterval = 60000; - Future _onNeedToRefresh() async { - if (syncStatus is FailedSyncStatus) { + Future _autoSave() async { + final nowTimestamp = DateTime.now().millisecondsSinceEpoch; + final sum = _lastAutosaveTimestamp + _autosaveInterval; + + if (_lastAutosaveTimestamp != 0 && sum < nowTimestamp) { return; } - if (walletInfo.isRecovery) { - _askForUpdateTransactionHistory(); - _askForUpdateBalance(); - } - - final currentHeight = getCurrentHeight(); - final nodeHeight = monero_wallet.getNodeHeightSync(); - - if (nodeHeight - currentHeight < moneroBlockSize) { - syncStatus = SyncedSyncStatus(); - - if (walletInfo.isRecovery) { - await setAsRecovered(); - } - } - - // if (walletInfo.isRecovery && - // (nodeHeight - currentHeight < moneroBlockSize)) { - // await setAsRecovered(); - // } - - if (currentHeight - _cachedRefreshHeight > moneroBlockSize) { - _cachedRefreshHeight = currentHeight; - await save(); - } + _lastAutosaveTimestamp = nowTimestamp + _autosaveInterval; + await save(); } - void _onNewTransaction() { - _askForUpdateBalance(); + void _onNewBlock(int height, int blocksLeft, double ptc) async { _askForUpdateTransactionHistory(); + _askForUpdateBalance(); + + if (blocksLeft < moneroBlockSize) { + syncStatus = SyncedSyncStatus(); + await _autoSave(); + } else { + syncStatus = SyncingSyncStatus(blocksLeft, ptc); + } } } From 7e33f1ae0afad359a4f86996e71afb3f7bffe5b5 Mon Sep 17 00:00:00 2001 From: M Date: Wed, 4 Nov 2020 00:29:06 +0200 Subject: [PATCH 22/58] CAKE-150 --- .../wallet_restore_from_seed_form.dart | 5 + .../widgets/seed_language_picker.dart | 1 + lib/src/widgets/annotated_editable_text.dart | 160 ---------------- lib/src/widgets/seed_widget.dart | 15 +- .../validable_annotated_editable_text.dart | 172 ++++++++++++++++++ 5 files changed, 188 insertions(+), 165 deletions(-) delete mode 100644 lib/src/widgets/annotated_editable_text.dart create mode 100644 lib/src/widgets/validable_annotated_editable_text.dart diff --git a/lib/src/screens/restore/wallet_restore_from_seed_form.dart b/lib/src/screens/restore/wallet_restore_from_seed_form.dart index c120b19b3..ad8c4f84b 100644 --- a/lib/src/screens/restore/wallet_restore_from_seed_form.dart +++ b/lib/src/screens/restore/wallet_restore_from_seed_form.dart @@ -46,6 +46,11 @@ class WalletRestoreFromSeedFormState extends State { context: context, builder: (BuildContext context) => SeedLanguagePicker(selected: language)); + + if (selected == null || selected.isEmpty) { + return; + } + _changeLanguage(selected); }, child: Container( diff --git a/lib/src/screens/seed_language/widgets/seed_language_picker.dart b/lib/src/screens/seed_language/widgets/seed_language_picker.dart index 47e43c7c7..36ca4de09 100644 --- a/lib/src/screens/seed_language/widgets/seed_language_picker.dart +++ b/lib/src/screens/seed_language/widgets/seed_language_picker.dart @@ -92,6 +92,7 @@ class SeedLanguagePickerState extends State { width: 300, color: Theme.of(context).accentTextTheme.title.backgroundColor, child: GridView.count( + padding: EdgeInsets.all(0), shrinkWrap: true, crossAxisCount: 3, childAspectRatio: 1, diff --git a/lib/src/widgets/annotated_editable_text.dart b/lib/src/widgets/annotated_editable_text.dart deleted file mode 100644 index cc42d9b35..000000000 --- a/lib/src/widgets/annotated_editable_text.dart +++ /dev/null @@ -1,160 +0,0 @@ -import 'package:flutter/material.dart'; - -class Annotation extends Comparable { - Annotation({@required this.range, this.style}); - - final TextRange range; - final TextStyle style; - - @override - int compareTo(Annotation other) => range.start.compareTo(other.range.start); -} - -class TextAnnotation extends Comparable { - TextAnnotation({@required this.text, this.style}); - - final TextStyle style; - final String text; - - @override - int compareTo(TextAnnotation other) => text.compareTo(other.text); -} - -class AnnotatedEditableText extends EditableText { - AnnotatedEditableText({ - Key key, - FocusNode focusNode, - TextEditingController controller, - TextStyle style, - ValueChanged onChanged, - ValueChanged onSubmitted, - Color cursorColor, - Color selectionColor, - Color backgroundCursorColor, - TextSelectionControls selectionControls, - TextStyle textStyle = const TextStyle( - color: Colors.black, - backgroundColor: Colors.transparent, - fontWeight: FontWeight.normal, - fontSize: 16), - @required this.words, - }) : textAnnotations = words - .map((word) => TextAnnotation(text: word, style: textStyle)) - .toList(), - super( - maxLines: null, - key: key, - focusNode: focusNode, - controller: controller, - cursorColor: cursorColor, - style: style, - keyboardType: TextInputType.text, - autocorrect: false, - autofocus: false, - selectionColor: selectionColor, - selectionControls: selectionControls, - backgroundCursorColor: backgroundCursorColor, - onChanged: onChanged, - onSubmitted: onSubmitted, - toolbarOptions: const ToolbarOptions( - copy: true, - cut: true, - paste: true, - selectAll: true, - ), - enableSuggestions: false, - enableInteractiveSelection: true, - showSelectionHandles: true, - showCursor: true, - ) { - textAnnotations.add(TextAnnotation( - text: ' ', style: TextStyle(backgroundColor: Colors.transparent))); - } - - final List words; - final List textAnnotations; - - @override - AnnotatedEditableTextState createState() => AnnotatedEditableTextState(); -} - -class AnnotatedEditableTextState extends EditableTextState { - @override - AnnotatedEditableText get widget => super.widget as AnnotatedEditableText; - - List getRanges() { - final source = widget.textAnnotations - .map((item) => range(item.text, textEditingValue.text) - .map((range) => Annotation(style: item.style, range: range))) - .expand((e) => e) - .toList(); - final result = List(); - final text = textEditingValue.text; - source.sort(); - Annotation prev; - - for (var item in source) { - if (prev == null) { - if (item.range.start > 0) { - result.add(Annotation( - range: TextRange(start: 0, end: item.range.start), - style: TextStyle( - color: Colors.black, backgroundColor: Colors.transparent))); - } - result.add(item); - prev = item; - continue; - } else { - if (prev.range.end > item.range.start) { - // throw StateError('Invalid (intersecting) ranges for annotated field'); - } else if (prev.range.end < item.range.start) { - result.add(Annotation( - range: TextRange(start: prev.range.end, end: item.range.start), - style: TextStyle( - color: Colors.red, backgroundColor: Colors.transparent))); - } - - result.add(item); - prev = item; - } - } - - if (result.length > 0 && result.last.range.end < text.length) { - result.add(Annotation( - range: TextRange(start: result.last.range.end, end: text.length), - style: TextStyle(backgroundColor: Colors.transparent))); - } - return result; - } - - List range(String pattern, String source) { - final result = List(); - - for (int index = source.indexOf(pattern); - index >= 0; - index = source.indexOf(pattern, index + 1)) { - final start = index; - final end = start + pattern.length; - result.add(TextRange(start: start, end: end)); - } - - return result; - } - - @override - TextSpan buildTextSpan() { - final text = textEditingValue.text; - final ranges = getRanges(); - - if (ranges.isNotEmpty) { - return TextSpan( - style: widget.style, - children: ranges - .map((item) => TextSpan( - style: item.style, text: item.range.textInside(text))) - .toList()); - } - - return TextSpan(style: widget.style, text: text); - } -} diff --git a/lib/src/widgets/seed_widget.dart b/lib/src/widgets/seed_widget.dart index 05589cdad..e444bc687 100644 --- a/lib/src/widgets/seed_widget.dart +++ b/lib/src/widgets/seed_widget.dart @@ -1,5 +1,5 @@ import 'package:cake_wallet/entities/wallet_type.dart'; -import 'package:cake_wallet/src/widgets/annotated_editable_text.dart'; +import 'package:cake_wallet/src/widgets/validable_annotated_editable_text.dart'; import 'package:cake_wallet/src/widgets/blockchain_height_widget.dart'; import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; @@ -77,10 +77,15 @@ class SeedWidgetState extends State { fontSize: 16.0, color: Theme.of(context).hintColor))), Padding( padding: EdgeInsets.only(right: 40, top: 10), - child: AnnotatedEditableText( + child: ValidableAnnotatedEditableText( cursorColor: Colors.blue, backgroundCursorColor: Colors.blue, - style: TextStyle( + validStyle: TextStyle( + color: Theme.of(context).primaryTextTheme.title.color, + backgroundColor: Colors.transparent, + fontWeight: FontWeight.normal, + fontSize: 16), + invalidStyle: TextStyle( fontSize: 16, color: Colors.red, fontWeight: FontWeight.normal, @@ -101,7 +106,7 @@ class SeedWidgetState extends State { width: 34, height: 34, child: InkWell( - onTap: () async => _pasteAddress(), + onTap: () async => _pasteText(), child: Container( padding: EdgeInsets.all(8), decoration: BoxDecoration( @@ -122,7 +127,7 @@ class SeedWidgetState extends State { ])); } - Future _pasteAddress() async { + Future _pasteText() async { final value = await Clipboard.getData('text/plain'); if (value?.text?.isNotEmpty ?? false) { diff --git a/lib/src/widgets/validable_annotated_editable_text.dart b/lib/src/widgets/validable_annotated_editable_text.dart new file mode 100644 index 000000000..b407a7950 --- /dev/null +++ b/lib/src/widgets/validable_annotated_editable_text.dart @@ -0,0 +1,172 @@ +import 'package:cake_wallet/core/seed_validator.dart'; +import 'package:cake_wallet/entities/wallet_type.dart'; +import 'package:flutter/material.dart'; + +class Annotation extends Comparable { + Annotation({@required this.range, this.style}); + + final TextRange range; + final TextStyle style; + + @override + int compareTo(Annotation other) => range.start.compareTo(other.range.start); +} + +class TextAnnotation extends Comparable { + TextAnnotation({@required this.text, this.style}); + + final TextStyle style; + final String text; + + @override + int compareTo(TextAnnotation other) => text.compareTo(other.text); +} + +class ValidableAnnotatedEditableText extends EditableText { + ValidableAnnotatedEditableText({ + Key key, + FocusNode focusNode, + TextEditingController controller, + List wordList, + ValueChanged onChanged, + ValueChanged onSubmitted, + Color cursorColor, + Color selectionColor, + Color backgroundCursorColor, + TextSelectionControls selectionControls, + this.validStyle, + this.invalidStyle, + TextStyle textStyle = const TextStyle( + color: Colors.black, + backgroundColor: Colors.transparent, + fontWeight: FontWeight.normal, + fontSize: 16), + @required this.words, + }) : super( + maxLines: null, + key: key, + focusNode: focusNode, + controller: controller, + cursorColor: cursorColor, + style: validStyle, + keyboardType: TextInputType.text, + autocorrect: false, + autofocus: false, + selectionColor: selectionColor, + selectionControls: selectionControls, + backgroundCursorColor: backgroundCursorColor, + onChanged: onChanged, + onSubmitted: onSubmitted, + toolbarOptions: const ToolbarOptions( + copy: true, + cut: true, + paste: true, + selectAll: true, + ), + enableSuggestions: false, + enableInteractiveSelection: true, + showSelectionHandles: true, + showCursor: true); + + final List words; + final TextStyle validStyle; + final TextStyle invalidStyle; + + @override + ValidableAnnotatedEditableTextState createState() => ValidableAnnotatedEditableTextState(); +} + +class ValidableAnnotatedEditableTextState extends EditableTextState { + @override + ValidableAnnotatedEditableText get widget => super.widget as ValidableAnnotatedEditableText; + + List getRanges() { + final result = List(); + final text = textEditingValue.text; + final source = text + .split(' ') + .map((word) { + final ranges = range(word, text); + final isValid = validate(word); + + return ranges.map((range) => Annotation( + style: isValid ? widget.validStyle : widget.invalidStyle, + range: range)); + }) + .expand((e) => e) + .toList(); + source.sort(); + Annotation prev; + + for (var item in source) { + Annotation annotation; + + if (prev == null) { + annotation = Annotation( + range: TextRange(start: 0, end: item.range.start), + style: TextStyle( + color: Colors.black, backgroundColor: Colors.transparent)); + } else if (prev.range.end < item.range.start) { + annotation = Annotation( + range: TextRange(start: prev.range.end, end: item.range.start), + style: TextStyle( + color: Colors.red, backgroundColor: Colors.transparent)); + } + + if (annotation != null) { + result.add(annotation); + result.add(item); + prev = item; + } + } + + if (result.length > 0 && result.last.range.end < text.length) { + result.add(Annotation( + range: TextRange(start: result.last.range.end, end: text.length), + style: TextStyle(backgroundColor: Colors.transparent))); + } + + return result; + } + + bool validate(String source) => widget.words.indexOf(source) >= 0; + + List range(String pattern, String source) { + final result = List(); + + if (pattern.isEmpty || source.isEmpty) { + return result; + } + + for (int index = source.indexOf(pattern); + index >= 0; + index = source.indexOf(pattern, index + 1)) { + final start = index; + final end = start + pattern.length; + result.add(TextRange(start: start, end: end)); + } + + return result; + } + + @override + TextSpan buildTextSpan() { + final text = textEditingValue.text; + final ranges = getRanges().toSet(); + + print('text $text'); + + if (ranges.isNotEmpty) { + return TextSpan( + style: widget.style, + children: ranges.map((item) { + final _text = item.range.textInside(text); + print( + '_text $_text; range ${item.range.start} : ${item.range.end}'); + return TextSpan(style: item.style, text: _text); + }).toList()); + } + + return TextSpan(style: widget.style, text: text); + } +} From fdb0f49f88d458fe4d87b12a27b62328c44608c7 Mon Sep 17 00:00:00 2001 From: M Date: Wed, 4 Nov 2020 17:54:44 +0200 Subject: [PATCH 23/58] Fixes. --- cw_monero/lib/wallet.dart | 23 +++++++++++++++---- ios/Runner.xcodeproj/project.pbxproj | 6 ++--- lib/monero/monero_wallet.dart | 22 +++++++++--------- .../validable_annotated_editable_text.dart | 18 +++++++-------- pubspec.lock | 2 +- 5 files changed, 42 insertions(+), 29 deletions(-) diff --git a/cw_monero/lib/wallet.dart b/cw_monero/lib/wallet.dart index 4348c8809..e3a0eb304 100644 --- a/cw_monero/lib/wallet.dart +++ b/cw_monero/lib/wallet.dart @@ -212,13 +212,18 @@ String getPublicSpendKey() => convertUTF8ToString(pointer: getPublicSpendKeyNative()); class SyncListener { - SyncListener({this.onNewBlock}); + SyncListener({this.onNewBlock}) { + _cachedBlockchainHeight = 0; + _lastKnownBlockHeight = 0; + _initialSyncHeight = 0; + } void Function(int, int, double) onNewBlock; Timer _updateSyncInfoTimer; - int _cachedBlockchainHeight = 0; - int _lastKnownBlockHeight = 0; + int _cachedBlockchainHeight; + int _lastKnownBlockHeight; + int _initialSyncHeight; Future getNodeHeightOrUpdate(int baseHeight) async { if (_cachedBlockchainHeight < baseHeight || _cachedBlockchainHeight == 0) { @@ -231,6 +236,7 @@ class SyncListener { void start() { _cachedBlockchainHeight = 0; _lastKnownBlockHeight = 0; + _initialSyncHeight = 0; _updateSyncInfoTimer ??= Timer.periodic(Duration(milliseconds: 1200), (_) async { var syncHeight = getSyncingHeight(); @@ -239,6 +245,10 @@ class SyncListener { syncHeight = getCurrentHeight(); } + if (_initialSyncHeight <= 0) { + _initialSyncHeight = syncHeight; + } + final bchHeight = await getNodeHeightOrUpdate(syncHeight); if (_lastKnownBlockHeight == syncHeight || syncHeight == null) { @@ -246,10 +256,15 @@ class SyncListener { } _lastKnownBlockHeight = syncHeight; - final track = bchHeight - syncHeight; + final track = bchHeight - _initialSyncHeight; final diff = track - (bchHeight - syncHeight); final ptc = diff <= 0 ? 0.0 : diff / track; final left = bchHeight - syncHeight; + + if (syncHeight < 0 || left < 0) { + return; + } + // 1. Actual new height; 2. Blocks left to finish; 3. Progress in percents; onNewBlock?.call(syncHeight, left, ptc); }); diff --git a/ios/Runner.xcodeproj/project.pbxproj b/ios/Runner.xcodeproj/project.pbxproj index 80e5a8a00..41ccba7a1 100644 --- a/ios/Runner.xcodeproj/project.pbxproj +++ b/ios/Runner.xcodeproj/project.pbxproj @@ -354,7 +354,7 @@ buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; CLANG_ENABLE_MODULES = YES; - CURRENT_PROJECT_VERSION = 12; + CURRENT_PROJECT_VERSION = 17; DEVELOPMENT_TEAM = 32J6BB6VUS; ENABLE_BITCODE = NO; FRAMEWORK_SEARCH_PATHS = ( @@ -494,7 +494,7 @@ buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; CLANG_ENABLE_MODULES = YES; - CURRENT_PROJECT_VERSION = 12; + CURRENT_PROJECT_VERSION = 17; DEVELOPMENT_TEAM = 32J6BB6VUS; ENABLE_BITCODE = NO; FRAMEWORK_SEARCH_PATHS = ( @@ -528,7 +528,7 @@ buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; CLANG_ENABLE_MODULES = YES; - CURRENT_PROJECT_VERSION = 12; + CURRENT_PROJECT_VERSION = 17; DEVELOPMENT_TEAM = 32J6BB6VUS; ENABLE_BITCODE = NO; FRAMEWORK_SEARCH_PATHS = ( diff --git a/lib/monero/monero_wallet.dart b/lib/monero/monero_wallet.dart index 8ce53f8d1..84d8b0e43 100644 --- a/lib/monero/monero_wallet.dart +++ b/lib/monero/monero_wallet.dart @@ -39,10 +39,12 @@ abstract class MoneroWalletBase extends WalletBase with Store { subaddressList.update(accountIndex: account.id); subaddress = subaddressList.subaddresses.first; address = subaddress.address; + _lastAutosaveTimestamp = 0; }); - _cachedRefreshHeight = 0; } + static const int _autoAfterSyncSaceInterval = 60000; + @override final MoneroTransactionHistory transactionHistory; @@ -81,7 +83,7 @@ abstract class MoneroWalletBase extends WalletBase with Store { String _filename; SyncListener _listener; ReactionDisposer _onAccountChangeReaction; - int _cachedRefreshHeight; + int _lastAutosaveTimestamp; Future init() async { await accountList.update(); @@ -95,7 +97,7 @@ abstract class MoneroWalletBase extends WalletBase with Store { address = subaddress.address; _setListeners(); await transactionHistory.update(); - print('walletInfo.isRecovery ${walletInfo.isRecovery}'); + if (walletInfo.isRecovery) { monero_wallet.setRecoveringFromSeed(isRecovery: walletInfo.isRecovery); @@ -156,6 +158,8 @@ abstract class MoneroWalletBase extends WalletBase with Store { try { syncStatus = StartingSyncStatus(); monero_wallet.startRefresh(); + _setListeners(); + _listener?.start(); } catch (e) { syncStatus = FailedSyncStatus(); print(e); @@ -234,7 +238,6 @@ abstract class MoneroWalletBase extends WalletBase with Store { void _setListeners() { _listener?.stop(); _listener = monero_wallet.setListeners(_onNewBlock); - _listener.start(); } void _setInitialHeight() { @@ -292,18 +295,15 @@ abstract class MoneroWalletBase extends WalletBase with Store { int _getUnlockedBalance() => monero_wallet.getUnlockedBalance(accountIndex: account.id); - int _lastAutosaveTimestamp = 0; - final int _autosaveInterval = 60000; - - Future _autoSave() async { + Future _afterSyncSave() async { final nowTimestamp = DateTime.now().millisecondsSinceEpoch; - final sum = _lastAutosaveTimestamp + _autosaveInterval; + final sum = _lastAutosaveTimestamp + _autoAfterSyncSaceInterval; if (_lastAutosaveTimestamp != 0 && sum < nowTimestamp) { return; } - _lastAutosaveTimestamp = nowTimestamp + _autosaveInterval; + _lastAutosaveTimestamp = nowTimestamp + _autoAfterSyncSaceInterval; await save(); } @@ -313,7 +313,7 @@ abstract class MoneroWalletBase extends WalletBase with Store { if (blocksLeft < moneroBlockSize) { syncStatus = SyncedSyncStatus(); - await _autoSave(); + await _afterSyncSave(); } else { syncStatus = SyncingSyncStatus(blocksLeft, ptc); } diff --git a/lib/src/widgets/validable_annotated_editable_text.dart b/lib/src/widgets/validable_annotated_editable_text.dart index b407a7950..e603c0327 100644 --- a/lib/src/widgets/validable_annotated_editable_text.dart +++ b/lib/src/widgets/validable_annotated_editable_text.dart @@ -73,12 +73,14 @@ class ValidableAnnotatedEditableText extends EditableText { final TextStyle invalidStyle; @override - ValidableAnnotatedEditableTextState createState() => ValidableAnnotatedEditableTextState(); + ValidableAnnotatedEditableTextState createState() => + ValidableAnnotatedEditableTextState(); } class ValidableAnnotatedEditableTextState extends EditableTextState { @override - ValidableAnnotatedEditableText get widget => super.widget as ValidableAnnotatedEditableText; + ValidableAnnotatedEditableText get widget => + super.widget as ValidableAnnotatedEditableText; List getRanges() { final result = List(); @@ -154,17 +156,13 @@ class ValidableAnnotatedEditableTextState extends EditableTextState { final text = textEditingValue.text; final ranges = getRanges().toSet(); - print('text $text'); - if (ranges.isNotEmpty) { return TextSpan( style: widget.style, - children: ranges.map((item) { - final _text = item.range.textInside(text); - print( - '_text $_text; range ${item.range.start} : ${item.range.end}'); - return TextSpan(style: item.style, text: _text); - }).toList()); + children: ranges + .map((item) => TextSpan( + style: item.style, text: item.range.textInside(text))) + .toList()); } return TextSpan(style: widget.style, text: text); diff --git a/pubspec.lock b/pubspec.lock index a04e9e780..182703e52 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -589,7 +589,7 @@ packages: name: node_interop url: "https://pub.dartlang.org" source: hosted - version: "1.1.1" + version: "1.2.0" node_io: dependency: transitive description: From 164fb8b916c551e34cc732afff81c6ff18d3022e Mon Sep 17 00:00:00 2001 From: M Date: Wed, 4 Nov 2020 19:38:18 +0200 Subject: [PATCH 24/58] Updated xmr.to description --- lib/generated/i18n.dart | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/lib/generated/i18n.dart b/lib/generated/i18n.dart index 56df759ba..48bff842c 100644 --- a/lib/generated/i18n.dart +++ b/lib/generated/i18n.dart @@ -35,7 +35,7 @@ class S implements WidgetsLocalizations { String get all => "ALL"; String get amount => "Amount: "; String get amount_is_estimate => "The receive amount is an estimate"; - String get amount_is_guaranteed => "IMPORTANT:\nIf you want to receive a guaranteed amount of BTC, please enter that amount in the BTC field. If you enter an XMR amount instead, then the BTC amount received is an estimate and can fluctuate depending on the rates."; + String get amount_is_guaranteed => "In xmr.to, to receive a guaranteed BTC amount, enter the BTC amount and not the XMR amount above"; String get auth_store_ban_timeout => "ban_timeout"; String get auth_store_banned_for => "Banned for "; String get auth_store_banned_minutes => " minutes"; @@ -486,7 +486,7 @@ class $de extends S { @override String get receive => "Erhalten"; @override - String get amount_is_guaranteed => "WICHTIG:\nWenn Sie einen garantierten BTC-Betrag erhalten möchten, geben Sie diesen Betrag in das Feld BTC ein. Wenn Sie stattdessen einen XMR-Betrag eingeben, handelt es sich bei dem erhaltenen BTC-Betrag um eine Schätzung, die je nach Kurs schwanken kann."; + String get amount_is_guaranteed => "Geben Sie in xmr.to den BTC-Betrag und nicht den oben genannten XMR-Betrag ein, um einen garantierten BTC-Betrag zu erhalten"; @override String get auth_store_banned_for => "Gebannt für "; @override @@ -1154,7 +1154,7 @@ class $hi extends S { @override String get receive => "प्राप्त करना"; @override - String get amount_is_guaranteed => "महत्वपूर्ण:\nयदि आप BTC की गारंटीकृत राशि प्राप्त करना चाहते हैं, तो कृपया उस राशि को BTC फ़ील्ड में दर्ज करें। यदि आप इसके बजाय एक एक्सएमआर राशि दर्ज करते हैं, तो प्राप्त बीटीसी राशि एक अनुमान है और दरों के आधार पर इसमें उतार-चढ़ाव हो सकता है।"; + String get amount_is_guaranteed => "Xmr.to में, गारंटीशुदा BTC राशि प्राप्त करने के लिए, BTC राशि दर्ज करें और ऊपर XMR राशि नहीं"; @override String get auth_store_banned_for => "के लिए प्रतिबंधित है "; @override @@ -1822,7 +1822,7 @@ class $ru extends S { @override String get receive => "Получить"; @override - String get amount_is_guaranteed => "ВАЖНО:\nЕсли вы хотите получить гарантированную сумму BTC, введите эту сумму в поле BTC. Если вместо этого вы вводите сумму XMR, полученная сумма BTC является приблизительной и может колебаться в зависимости от курса."; + String get amount_is_guaranteed => "В xmr.to, чтобы получить гарантированную сумму BTC, введите сумму BTC, а не сумму XMR выше"; @override String get auth_store_banned_for => "Заблокировано на "; @override @@ -2490,7 +2490,7 @@ class $ko extends S { @override String get receive => "받다"; @override - String get amount_is_guaranteed => "중대한:\n보장 된 BTC 금액을 받으려면 BTC 필드에 해당 금액을 입력하십시오. 대신 XMR 금액을 입력하면 수령 한 BTC 금액이 추정치이며 요율에 따라 변동될 수 있습니다."; + String get amount_is_guaranteed => "xmr.to에서 보장 된 BTC 금액을 받으려면 위의 XMR 금액이 아닌 BTC 금액을 입력하십시오."; @override String get auth_store_banned_for => "금지"; @override @@ -3158,7 +3158,7 @@ class $pt extends S { @override String get receive => "Receber"; @override - String get amount_is_guaranteed => "IMPORTANTE:\nSe você deseja receber um valor garantido de BTC, insira esse valor no campo BTC. Se, em vez disso, você inserir um valor XMR, o valor BTC recebido é uma estimativa e pode flutuar dependendo das taxas."; + String get amount_is_guaranteed => "Em xmr.to, para receber um valor BTC garantido, insira o valor BTC e não o valor XMR acima"; @override String get auth_store_banned_for => "Banido por"; @override @@ -3826,7 +3826,7 @@ class $uk extends S { @override String get receive => "Отримати"; @override - String get amount_is_guaranteed => "ВАЖЛИВО:\nЯкщо ви хочете отримати гарантовану суму BTC, введіть цю суму в поле BTC. Якщо замість цього ввести суму XMR, отримана сума BTC є приблизною і може коливатися залежно від курсу."; + String get amount_is_guaranteed => "У xmr.to, щоб отримати гарантовану суму BTC, введіть суму BTC, а не XMR вище"; @override String get auth_store_banned_for => "Заблоковано на "; @override @@ -4494,7 +4494,7 @@ class $ja extends S { @override String get receive => "受け取る"; @override - String get amount_is_guaranteed => "重要:\n保証された金額のBTCを受け取りたい場合は、その金額を[BTC]フィールドに入力してください。 代わりにXMR金額を入力した場合、受け取ったBTC金額は見積もりであり、レートに応じて変動する可能性があります。"; + String get amount_is_guaranteed => "xmr.toで、保証されたBTC金額を受け取るには、上記のXMR金額ではなく、BTC金額を入力します"; @override String get auth_store_banned_for => "禁止されています "; @override @@ -5166,7 +5166,7 @@ class $pl extends S { @override String get receive => "Otrzymać"; @override - String get amount_is_guaranteed => "WAŻNY:\nJeśli chcesz otrzymać gwarantowaną kwotę BTC, wprowadź tę kwotę w polu BTC. Jeśli zamiast tego wpiszesz kwotę XMR, otrzymana kwota BTC jest szacunkowa i może się zmieniać w zależności od stawek."; + String get amount_is_guaranteed => "W xmr.to, aby otrzymać gwarantowaną kwotę BTC, wprowadź kwotę BTC, a nie kwotę XMR powyżej"; @override String get auth_store_banned_for => "Bzbanowany za "; @override @@ -5834,7 +5834,7 @@ class $es extends S { @override String get receive => "Recibir"; @override - String get amount_is_guaranteed => "IMPORTANTE:\nSi desea recibir una cantidad garantizada de BTC, ingrese esa cantidad en el campo BTC. Si ingresa una cantidad de XMR en su lugar, la cantidad de BTC recibida es una estimación y puede variar según las tarifas."; + String get amount_is_guaranteed => "En xmr.to, para recibir una cantidad BTC garantizada, ingrese la cantidad BTC y no la cantidad XMR arriba"; @override String get auth_store_banned_for => "Prohibido para "; @override @@ -6502,7 +6502,7 @@ class $nl extends S { @override String get receive => "Krijgen"; @override - String get amount_is_guaranteed => "BELANGRIJK:\nAls u een gegarandeerd bedrag aan BTC wilt ontvangen, voert u dat bedrag in het BTC-veld in. Als u in plaats daarvan een XMR-bedrag invoert, is het ontvangen BTC-bedrag een schatting en kan het fluctueren afhankelijk van de tarieven."; + String get amount_is_guaranteed => "Om een gegarandeerd BTC-bedrag te ontvangen, voert u in xmr.to het BTC-bedrag in en niet het bovenstaande XMR-bedrag"; @override String get auth_store_banned_for => "Verboden voor "; @override @@ -7170,7 +7170,7 @@ class $zh extends S { @override String get receive => "接收"; @override - String get amount_is_guaranteed => "重要:\n如果您想獲得保證的BTC金額,請在BTC字段中輸入該金額。 如果您輸入的是XMR金額,則收到的BTC金額只是估算值,可能會隨匯率而波動。"; + String get amount_is_guaranteed => "在xmr.to中,要接收保证的BTC数量,请输入BTC数量,而不要输入上方的XMR数量"; @override String get auth_store_banned_for => "禁止 "; @override From 8a55d566c69f991f7881cbf779cee5dabd5cf0f0 Mon Sep 17 00:00:00 2001 From: M Date: Fri, 6 Nov 2020 15:12:38 +0200 Subject: [PATCH 25/58] Fixed migration for pin length. Fixed issue for change of current address on dashboard address page. --- lib/di.dart | 2 +- lib/entities/fs_migration.dart | 3 ++- .../wallet_address_list_view_model.dart | 13 +++++++++++-- 3 files changed, 14 insertions(+), 4 deletions(-) diff --git a/lib/di.dart b/lib/di.dart index 15a47f04b..137701416 100644 --- a/lib/di.dart +++ b/lib/di.dart @@ -157,7 +157,7 @@ Future setup( }); getIt.registerFactory( - () => WalletAddressListViewModel(wallet: getIt.get().wallet)); + () => WalletAddressListViewModel(appStore: getIt.get())); getIt.registerFactory(() => BalanceViewModel( appStore: getIt.get(), diff --git a/lib/entities/fs_migration.dart b/lib/entities/fs_migration.dart index 462e30843..54b72c9ce 100644 --- a/lib/entities/fs_migration.dart +++ b/lib/entities/fs_migration.dart @@ -8,6 +8,7 @@ import 'package:cake_wallet/entities/encrypt.dart'; import 'package:cake_wallet/entities/fiat_currency.dart'; import 'package:cake_wallet/entities/ios_legacy_helper.dart' as ios_legacy_helper; +import 'package:cake_wallet/entities/preferences_key.dart'; import 'package:cake_wallet/entities/secret_store_key.dart'; import 'package:cake_wallet/entities/wallet_info.dart'; import 'package:cake_wallet/entities/wallet_type.dart'; @@ -98,7 +99,7 @@ Future ios_migrate_user_defaults() async { //assign the pin lenght final pinLength = await ios_legacy_helper.getInt('pin-length'); - await prefs.setInt('pin-length', pinLength); + await prefs.setInt(PreferencesKey.currentPinLength, pinLength); //default value for display list key? final walletName = await ios_legacy_helper.getString('current_wallet_name'); diff --git a/lib/view_model/wallet_address_list/wallet_address_list_view_model.dart b/lib/view_model/wallet_address_list/wallet_address_list_view_model.dart index 0c8d10502..e8c897bfc 100644 --- a/lib/view_model/wallet_address_list/wallet_address_list_view_model.dart +++ b/lib/view_model/wallet_address_list/wallet_address_list_view_model.dart @@ -1,3 +1,4 @@ +import 'package:cake_wallet/store/app_store.dart'; import 'package:flutter/foundation.dart'; import 'package:mobx/mobx.dart'; import 'package:cake_wallet/bitcoin/bitcoin_wallet.dart'; @@ -54,9 +55,12 @@ class BitcoinURI extends PaymentURI { } abstract class WalletAddressListViewModelBase with Store { - WalletAddressListViewModelBase({@required WalletBase wallet}) { + WalletAddressListViewModelBase( + {@required AppStore appStore}) { hasAccounts = _wallet is MoneroWallet; - _wallet = wallet; + _appStore = appStore; + _wallet = _appStore.wallet; + _onWalletChangeReaction = reaction((_) => _appStore.wallet, (WalletBase wallet) => _wallet = wallet); _init(); } @@ -111,10 +115,15 @@ abstract class WalletAddressListViewModelBase with Store { bool hasAccounts; + @observable WalletBase _wallet; List _baseItems; + AppStore _appStore; + + ReactionDisposer _onWalletChangeReaction; + @computed String get accountLabel { final wallet = _wallet; From b17e7744c6122e2f791692defefedcda69396d8b Mon Sep 17 00:00:00 2001 From: M Date: Fri, 6 Nov 2020 20:54:00 +0200 Subject: [PATCH 26/58] Fixes --- cw_monero/lib/wallet.dart | 12 +- ios/Runner.xcodeproj/project.pbxproj | 12 +- lib/core/pending_transaction.dart | 1 + lib/di.dart | 16 +- lib/main.dart | 5 +- lib/monero/monero_transaction_info.dart | 1 + lib/monero/monero_wallet.dart | 15 +- lib/monero/pending_monero_transaction.dart | 3 + lib/router.dart | 30 +- lib/src/screens/send/send_page.dart | 315 +++++++++--------- .../transaction_details_page.dart | 24 +- lib/view_model/send/send_view_model.dart | 36 +- 12 files changed, 273 insertions(+), 197 deletions(-) diff --git a/cw_monero/lib/wallet.dart b/cw_monero/lib/wallet.dart index e3a0eb304..f10c35620 100644 --- a/cw_monero/lib/wallet.dart +++ b/cw_monero/lib/wallet.dart @@ -212,13 +212,14 @@ String getPublicSpendKey() => convertUTF8ToString(pointer: getPublicSpendKeyNative()); class SyncListener { - SyncListener({this.onNewBlock}) { + SyncListener(this.onNewBlock, this.onNewTransaction) { _cachedBlockchainHeight = 0; _lastKnownBlockHeight = 0; _initialSyncHeight = 0; } void Function(int, int, double) onNewBlock; + void Function() onNewTransaction; Timer _updateSyncInfoTimer; int _cachedBlockchainHeight; @@ -239,6 +240,10 @@ class SyncListener { _initialSyncHeight = 0; _updateSyncInfoTimer ??= Timer.periodic(Duration(milliseconds: 1200), (_) async { + if (isNewTransactionExist() ?? false) { + onNewTransaction?.call(); + } + var syncHeight = getSyncingHeight(); if (syncHeight <= 0) { @@ -273,8 +278,9 @@ class SyncListener { void stop() => _updateSyncInfoTimer?.cancel(); } -SyncListener setListeners(void Function(int, int, double) onNewBlock) { - final listener = SyncListener(onNewBlock: onNewBlock); +SyncListener setListeners(void Function(int, int, double) onNewBlock, + void Function() onNewTransaction) { + final listener = SyncListener(onNewBlock, onNewTransaction); setListenerNative(); return listener; } diff --git a/ios/Runner.xcodeproj/project.pbxproj b/ios/Runner.xcodeproj/project.pbxproj index 41ccba7a1..e2bd0672c 100644 --- a/ios/Runner.xcodeproj/project.pbxproj +++ b/ios/Runner.xcodeproj/project.pbxproj @@ -354,7 +354,7 @@ buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; CLANG_ENABLE_MODULES = YES; - CURRENT_PROJECT_VERSION = 17; + CURRENT_PROJECT_VERSION = 2; DEVELOPMENT_TEAM = 32J6BB6VUS; ENABLE_BITCODE = NO; FRAMEWORK_SEARCH_PATHS = ( @@ -371,7 +371,7 @@ "$(inherited)", "$(PROJECT_DIR)/Flutter", ); - MARKETING_VERSION = 4.0.0; + MARKETING_VERSION = 4.0.1; PRODUCT_BUNDLE_IDENTIFIER = com.fotolockr.cakewallet; PRODUCT_NAME = "$(TARGET_NAME)"; SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h"; @@ -494,7 +494,7 @@ buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; CLANG_ENABLE_MODULES = YES; - CURRENT_PROJECT_VERSION = 17; + CURRENT_PROJECT_VERSION = 2; DEVELOPMENT_TEAM = 32J6BB6VUS; ENABLE_BITCODE = NO; FRAMEWORK_SEARCH_PATHS = ( @@ -511,7 +511,7 @@ "$(inherited)", "$(PROJECT_DIR)/Flutter", ); - MARKETING_VERSION = 4.0.0; + MARKETING_VERSION = 4.0.1; PRODUCT_BUNDLE_IDENTIFIER = com.fotolockr.cakewallet; PRODUCT_NAME = "$(TARGET_NAME)"; SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h"; @@ -528,7 +528,7 @@ buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; CLANG_ENABLE_MODULES = YES; - CURRENT_PROJECT_VERSION = 17; + CURRENT_PROJECT_VERSION = 2; DEVELOPMENT_TEAM = 32J6BB6VUS; ENABLE_BITCODE = NO; FRAMEWORK_SEARCH_PATHS = ( @@ -545,7 +545,7 @@ "$(inherited)", "$(PROJECT_DIR)/Flutter", ); - MARKETING_VERSION = 4.0.0; + MARKETING_VERSION = 4.0.1; PRODUCT_BUNDLE_IDENTIFIER = com.fotolockr.cakewallet; PRODUCT_NAME = "$(TARGET_NAME)"; SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h"; diff --git a/lib/core/pending_transaction.dart b/lib/core/pending_transaction.dart index c7adb4478..c7f9b77d5 100644 --- a/lib/core/pending_transaction.dart +++ b/lib/core/pending_transaction.dart @@ -1,4 +1,5 @@ mixin PendingTransaction { + String get id; String get amountFormatted; String get feeFormatted; diff --git a/lib/di.dart b/lib/di.dart index 137701416..9dad3efb3 100644 --- a/lib/di.dart +++ b/lib/di.dart @@ -1,8 +1,9 @@ - import 'package:cake_wallet/bitcoin/bitcoin_wallet_service.dart'; import 'package:cake_wallet/core/wallet_service.dart'; import 'package:cake_wallet/entities/biometric_auth.dart'; import 'package:cake_wallet/entities/contact_record.dart'; +import 'package:cake_wallet/entities/transaction_description.dart'; +import 'package:cake_wallet/entities/transaction_info.dart'; import 'package:cake_wallet/monero/monero_wallet_service.dart'; import 'package:cake_wallet/entities/contact.dart'; import 'package:cake_wallet/entities/node.dart'; @@ -23,6 +24,7 @@ import 'package:cake_wallet/src/screens/send/send_template_page.dart'; import 'package:cake_wallet/src/screens/settings/change_language.dart'; import 'package:cake_wallet/src/screens/settings/settings.dart'; import 'package:cake_wallet/src/screens/setup_pin_code/setup_pin_code.dart'; +import 'package:cake_wallet/src/screens/transaction_details/transaction_details_page.dart'; import 'package:cake_wallet/src/screens/wallet_keys/wallet_keys_page.dart'; import 'package:cake_wallet/src/screens/exchange/exchange_page.dart'; import 'package:cake_wallet/src/screens/exchange/exchange_template_page.dart'; @@ -92,7 +94,8 @@ Future setup( Box contactSource, Box tradesSource, Box