CWA-210 | added template class, template tile, send template page and send template store

Oleksandr Sobol committed May 8, 2020 at 19:22 UTC 25f3920073b43a634781107337bf316cf5446968
25 files changed +857 -47
assets/images/2.0x/to_icon.png
Binary files /dev/null and b/assets/images/2.0x/to_icon.png differ
assets/images/3.0x/to_icon.png
Binary files /dev/null and b/assets/images/3.0x/to_icon.png differ
assets/images/to_icon.png
Binary files /dev/null and b/assets/images/to_icon.png differ
lib/generated/i18n.dart
+208 -1
@@ -77,6 +77,7 @@ class S implements WidgetsLocalizations {
77 String get error_text_node_port => "Node port can only contain numbers between 0 and 65535";
78 String get error_text_payment_id => "Payment ID can only contain from 16 to 64 chars in hex";
79 String get error_text_subaddress_name => "Subaddress name can't contain ` , ' \" symbols\nand must be between 1 and 20 characters long";
80 + String get error_text_template => "Template name and address can't contain ` , ' \" symbols\nand must be between 1 and 106 characters long";
81 String get error_text_wallet_name => "Wallet name can only contain letters, numbers\nand must be between 1 and 15 characters long";
82 String get error_text_xmr => "XMR value can't exceed available balance.\nThe number of fraction digits must be less or equal to 12";
83 String get estimated => "Estimated";
@@ -165,12 +166,20 @@ class S implements WidgetsLocalizations {
166 String get seed_share => "Share seed";
167 String get seed_title => "Seed";
168 String get send => "Send";
169 + String get send_amount => "Amount:";
170 String get send_creating_transaction => "Creating transaction";
171 String get send_error_currency => "Currency can only contain numbers";
172 String get send_error_minimum_value => "Minimum value of amount is 0.01";
173 String get send_estimated_fee => "Estimated fee:";
174 + String get send_fee => "Fee:";
175 + String get send_got_it => "Got it";
176 String get send_monero_address => "Monero address";
177 + String get send_name => "Name";
178 + String get send_new => "New";
179 String get send_payment_id => "Payment ID (optional)";
180 + String get send_sending => "Sending...";
181 + String get send_success => "Your Monero was successfully sent";
182 + String get send_templates => "Templates";
183 String get send_title => "Send Monero";
184 String get send_xmr => "Send XMR";
185 String get send_your_wallet => "Your wallet";
@@ -338,6 +347,8 @@ class $de extends S {
347 @override
348 String get transaction_sent => "Transaktion gesendet!";
349 @override
350 + String get send_fee => "Gebühr:";
351 + @override
352 String get password => "Passwort";
353 @override
354 String get you_will_get => "Sie erhalten";
@@ -350,6 +361,8 @@ class $de extends S {
361 @override
362 String get share_address => "Adresse teilen ";
363 @override
364 + String get send_templates => "Vorlagen";
365 + @override
366 String get please_try_to_connect_to_another_node => "Bitte versuchen Sie, eine Verbindung zu einem anderen Knoten herzustellen";
367 @override
368 String get trade_state_traded => "Handeln";
@@ -374,6 +387,8 @@ class $de extends S {
387 @override
388 String get seed_language_portuguese => "Portugiesisch";
389 @override
390 + String get send_new => "Neu";
391 + @override
392 String get setup_pin => "PIN einrichten";
393 @override
394 String get transaction_details_recipient_address => "Empfängeradresse";
@@ -388,6 +403,8 @@ class $de extends S {
403 @override
404 String get trade_state_trading => "Handel";
405 @override
406 + String get send_sending => "Senden...";
407 + @override
408 String get error_text_address => "Die Walletadresse muss dem Typ entsprechen\nder Kryptowährung";
409 @override
410 String get send_your_wallet => "Deine Geldbörse";
@@ -516,6 +533,8 @@ class $de extends S {
533 @override
534 String get paste => "Einfügen";
535 @override
536 + String get send_got_it => "Ich habs";
537 + @override
538 String get widgets_or => "oder";
539 @override
540 String get remove => "Löschen";
@@ -524,12 +543,16 @@ class $de extends S {
543 @override
544 String get yesterday => "Gestern";
545 @override
546 + String get send_amount => "Menge:";
547 + @override
548 String get expired => "Abgelaufen";
549 @override
550 String get transaction_priority_regular => "Regulär";
551 @override
552 String get trade_details_created_at => "Hergestellt in";
553 @override
554 + String get send_success => "Ihr Monero wurde erfolgreich gesendet";
555 + @override
556 String get settings_wallets => "Brieftaschen";
557 @override
558 String get settings_only_transactions => "Nur Transaktionen";
@@ -552,6 +575,8 @@ class $de extends S {
575 @override
576 String get nodes => "Knoten";
577 @override
578 + String get error_text_template => "Vorlagenname und Adresse dürfen nicht enthalten ` , ' \" symbole\nund muss zwischen 1 und 106 Zeichen lang sein";
579 + @override
580 String get seed_share => "Teilen Sie Seed";
581 @override
582 String get widgets_restore_from_blockheight => "Aus Blockhöhe wiederherstellen";
@@ -688,6 +713,8 @@ class $de extends S {
713 @override
714 String get restore_active_seed => "Aktives Seed";
715 @override
716 + String get send_name => "Name";
717 + @override
718 String get settings_personal => "persönlich";
719 @override
720 String get seed_title => "Seed";
@@ -922,6 +949,8 @@ class $hi extends S {
949 @override
950 String get transaction_sent => "भेजा गया लेन-देन";
951 @override
952 + String get send_fee => "शुल्क:";
953 + @override
954 String get password => "पारण शब्द";
955 @override
956 String get you_will_get => "आपको मिल जायेगा";
@@ -934,6 +963,8 @@ class $hi extends S {
963 @override
964 String get share_address => "पता साझा करें";
965 @override
966 + String get send_templates => "टेम्पलेट्स";
967 + @override
968 String get please_try_to_connect_to_another_node => "कृपया दूसरे नोड से कनेक्ट करने का प्रयास करें";
969 @override
970 String get trade_state_traded => "ट्रेडेड";
@@ -958,6 +989,8 @@ class $hi extends S {
989 @override
990 String get seed_language_portuguese => "पुर्तगाली";
991 @override
992 + String get send_new => "नया";
993 + @override
994 String get setup_pin => "पिन सेट करें";
995 @override
996 String get transaction_details_recipient_address => "प्राप्तकर्ता का पता";
@@ -972,6 +1005,8 @@ class $hi extends S {
1005 @override
1006 String get trade_state_trading => "व्यापार";
1007 @override
1008 + String get send_sending => "भेजना...";
1009 + @override
1010 String get error_text_address => "वॉलेट पता प्रकार के अनुरूप होना चाहिए\nक्रिप्टोकरेंसी का";
1011 @override
1012 String get send_your_wallet => "आपका बटुआ";
@@ -1100,6 +1135,8 @@ class $hi extends S {
1135 @override
1136 String get paste => "पेस्ट करें";
1137 @override
1138 + String get send_got_it => "समझ गया";
1139 + @override
1140 String get widgets_or => "या";
1141 @override
1142 String get remove => "हटाना";
@@ -1108,12 +1145,16 @@ class $hi extends S {
1145 @override
1146 String get yesterday => "बिता कल";
1147 @override
1148 + String get send_amount => "रकम:";
1149 + @override
1150 String get expired => "समय सीमा समाप्त";
1151 @override
1152 String get transaction_priority_regular => "नियमित";
1153 @override
1154 String get trade_details_created_at => "पर बनाया गया";
1155 @override
1156 + String get send_success => "आपका Monero सफलतापूर्वक भेजा गया";
1157 + @override
1158 String get settings_wallets => "पर्स";
1159 @override
1160 String get settings_only_transactions => "केवल लेन-देन";
@@ -1136,6 +1177,8 @@ class $hi extends S {
1177 @override
1178 String get nodes => "नोड्स";
1179 @override
1180 + String get error_text_template => "टेम्प्लेट का नाम और पता नहीं हो सकता ` , ' \" प्रतीकों\nऔर 1 और 106 वर्णों के बीच लंबा होना चाहिए";
1181 + @override
1182 String get seed_share => "बीज साझा करें";
1183 @override
1184 String get widgets_restore_from_blockheight => "ब्लॉकचेन से पुनर्स्थापित करें";
@@ -1272,6 +1315,8 @@ class $hi extends S {
1315 @override
1316 String get restore_active_seed => "सक्रिय बीज";
1317 @override
1318 + String get send_name => "नाम";
1319 + @override
1320 String get settings_personal => "निजी";
1321 @override
1322 String get seed_title => "बीज";
@@ -1506,6 +1551,8 @@ class $ru extends S {
1551 @override
1552 String get transaction_sent => "Tранзакция отправлена!";
1553 @override
1554 + String get send_fee => "Комиссия:";
1555 + @override
1556 String get password => "Пароль";
1557 @override
1558 String get you_will_get => "Вы получите";
@@ -1518,6 +1565,8 @@ class $ru extends S {
1565 @override
1566 String get share_address => "Поделиться адресом";
1567 @override
1568 + String get send_templates => "Шаблоны";
1569 + @override
1570 String get please_try_to_connect_to_another_node => "Пожалуйста, попробуйте подключиться к другой ноде";
1571 @override
1572 String get trade_state_traded => "Сделка завершена";
@@ -1542,6 +1591,8 @@ class $ru extends S {
1591 @override
1592 String get seed_language_portuguese => "Португальский";
1593 @override
1594 + String get send_new => "Новый";
1595 + @override
1596 String get setup_pin => "Настроить PIN";
1597 @override
1598 String get transaction_details_recipient_address => "Адрес получателя";
@@ -1556,6 +1607,8 @@ class $ru extends S {
1607 @override
1608 String get trade_state_trading => "Совершение сделки";
1609 @override
1610 + String get send_sending => "Отправка...";
1611 + @override
1612 String get error_text_address => "Адрес кошелька должен соответствовать типу\nкриптовалюты";
1613 @override
1614 String get send_your_wallet => "Ваш кошелёк";
@@ -1684,6 +1737,8 @@ class $ru extends S {
1737 @override
1738 String get paste => "Вставить";
1739 @override
1740 + String get send_got_it => "Понял";
1741 + @override
1742 String get widgets_or => "или";
1743 @override
1744 String get remove => "Удалить";
@@ -1692,12 +1747,16 @@ class $ru extends S {
1747 @override
1748 String get yesterday => "Вчера";
1749 @override
1750 + String get send_amount => "Сумма:";
1751 + @override
1752 String get expired => "Истекает";
1753 @override
1754 String get transaction_priority_regular => "Обычный";
1755 @override
1756 String get trade_details_created_at => "Создано";
1757 @override
1758 + String get send_success => "Ваш Monero был успешно отправлен";
1759 + @override
1760 String get settings_wallets => "Кошельки";
1761 @override
1762 String get settings_only_transactions => "Транзакции";
@@ -1720,6 +1779,8 @@ class $ru extends S {
1779 @override
1780 String get nodes => "Ноды";
1781 @override
1782 + String get error_text_template => "Имя и адрес шаблона не может содержать ` , ' \" символы\nи должно быть от 1 до 106 символов в длину";
1783 + @override
1784 String get seed_share => "Поделиться мнемонической фразой";
1785 @override
1786 String get widgets_restore_from_blockheight => "Восстановить на высоте блока";
@@ -1856,6 +1917,8 @@ class $ru extends S {
1917 @override
1918 String get restore_active_seed => "Активная мнемоническая фраза";
1919 @override
1920 + String get send_name => "Имя";
1921 + @override
1922 String get settings_personal => "Персональные";
1923 @override
1924 String get seed_title => "Мнемоническая фраза";
@@ -2090,6 +2153,8 @@ class $ko extends S {
2153 @override
2154 String get transaction_sent => "거래가 전송되었습니다!";
2155 @override
2156 + String get send_fee => "회비:";
2157 + @override
2158 String get password => "암호";
2159 @override
2160 String get you_will_get => "당신은 얻을 것이다";
@@ -2102,6 +2167,8 @@ class $ko extends S {
2167 @override
2168 String get share_address => "주소 공유";
2169 @override
2170 + String get send_templates => "템플릿";
2171 + @override
2172 String get please_try_to_connect_to_another_node => "다른 노드에 연결을 시도하십시오";
2173 @override
2174 String get trade_state_traded => "거래";
@@ -2126,6 +2193,8 @@ class $ko extends S {
2193 @override
2194 String get seed_language_portuguese => "포르투갈 인";
2195 @override
2196 + String get send_new => "새로운";
2197 + @override
2198 String get setup_pin => "설정 PIN";
2199 @override
2200 String get transaction_details_recipient_address => "받는 사람 주소";
@@ -2140,6 +2209,8 @@ class $ko extends S {
2209 @override
2210 String get trade_state_trading => "거래";
2211 @override
2212 + String get send_sending => "배상...";
2213 + @override
2214 String get error_text_address => "지갑 주소는 유형과 일치해야합니다\n암호 화폐";
2215 @override
2216 String get send_your_wallet => "지갑";
@@ -2268,6 +2339,8 @@ class $ko extends S {
2339 @override
2340 String get paste => "풀";
2341 @override
2342 + String get send_got_it => "알았다";
2343 + @override
2344 String get widgets_or => "또는";
2345 @override
2346 String get remove => "없애다";
@@ -2276,12 +2349,16 @@ class $ko extends S {
2349 @override
2350 String get yesterday => "어제";
2351 @override
2352 + String get send_amount => "양:";
2353 + @override
2354 String get expired => "만료";
2355 @override
2356 String get transaction_priority_regular => "정규병";
2357 @override
2358 String get trade_details_created_at => "에 작성";
2359 @override
2360 + String get send_success => "Monero가 성공적으로 전송되었습니다";
2361 + @override
2362 String get settings_wallets => "지갑";
2363 @override
2364 String get settings_only_transactions => "거래 만";
@@ -2304,6 +2381,8 @@ class $ko extends S {
2381 @override
2382 String get nodes => "노드";
2383 @override
2384 + String get error_text_template => "템플릿 이름과 주소는 포함 할 수 없습니다 ` , ' \" 기호 \n1 ~ 106 자 사이 여야합니다";
2385 + @override
2386 String get seed_share => "시드 공유";
2387 @override
2388 String get widgets_restore_from_blockheight => "블록 높이에서 복원";
@@ -2440,6 +2519,8 @@ class $ko extends S {
2519 @override
2520 String get restore_active_seed => "활성 종자";
2521 @override
2522 + String get send_name => "이름";
2523 + @override
2524 String get settings_personal => "개인적인";
2525 @override
2526 String get seed_title => "씨";
@@ -2674,6 +2755,8 @@ class $pt extends S {
2755 @override
2756 String get transaction_sent => "Transação enviada!";
2757 @override
2758 + String get send_fee => "Taxa:";
2759 + @override
2760 String get password => "Senha";
2761 @override
2762 String get you_will_get => "Você receberá";
@@ -2686,6 +2769,8 @@ class $pt extends S {
2769 @override
2770 String get share_address => "Compartilhar endereço";
2771 @override
2772 + String get send_templates => "Modelos";
2773 + @override
2774 String get please_try_to_connect_to_another_node => "Por favor, tente conectar-se a outro nó";
2775 @override
2776 String get trade_state_traded => "Troca realizada";
@@ -2710,6 +2795,8 @@ class $pt extends S {
2795 @override
2796 String get seed_language_portuguese => "Português";
2797 @override
2798 + String get send_new => "Novo";
2799 + @override
2800 String get setup_pin => "Configurar PIN";
2801 @override
2802 String get transaction_details_recipient_address => "Endereço do destinatário";
@@ -2724,6 +2811,8 @@ class $pt extends S {
2811 @override
2812 String get trade_state_trading => "Em andamento";
2813 @override
2814 + String get send_sending => "Enviando...";
2815 + @override
2816 String get error_text_address => "O endereço da carteira deve corresponder à\ncriptomoeda selecionada";
2817 @override
2818 String get send_your_wallet => "Sua carteira";
@@ -2852,6 +2941,8 @@ class $pt extends S {
2941 @override
2942 String get paste => "Colar";
2943 @override
2944 + String get send_got_it => "Entendi";
2945 + @override
2946 String get widgets_or => "ou";
2947 @override
2948 String get remove => "Remover";
@@ -2860,12 +2951,16 @@ class $pt extends S {
2951 @override
2952 String get yesterday => "Ontem";
2953 @override
2954 + String get send_amount => "Montante:";
2955 + @override
2956 String get expired => "Expirada";
2957 @override
2958 String get transaction_priority_regular => "Regular";
2959 @override
2960 String get trade_details_created_at => "Criada em";
2961 @override
2962 + String get send_success => "Seu Monero foi enviado com sucesso";
2963 + @override
2964 String get settings_wallets => "Carteiras";
2965 @override
2966 String get settings_only_transactions => "Somente transações";
@@ -2888,6 +2983,8 @@ class $pt extends S {
2983 @override
2984 String get nodes => "Nós";
2985 @override
2986 + String get error_text_template => "O nome e o endereço do modelo não podem conter os símbolos ` , ' \" \ne deve ter entre 1 e 106 caracteres";
2987 + @override
2988 String get seed_share => "Compartilhar semente";
2989 @override
2990 String get widgets_restore_from_blockheight => "Restaurar a partir de altura do bloco";
@@ -3024,6 +3121,8 @@ class $pt extends S {
3121 @override
3122 String get restore_active_seed => "Semente ativa";
3123 @override
3124 + String get send_name => "Nome";
3125 + @override
3126 String get settings_personal => "Pessoal";
3127 @override
3128 String get seed_title => "Semente";
@@ -3258,6 +3357,8 @@ class $uk extends S {
3357 @override
3358 String get transaction_sent => "Tранзакцію відправлено!";
3359 @override
3360 + String get send_fee => "Комісія:";
3361 + @override
3362 String get password => "Пароль";
3363 @override
3364 String get you_will_get => "Ви отримаєте";
@@ -3270,6 +3371,8 @@ class $uk extends S {
3371 @override
3372 String get share_address => "Поділитися адресою";
3373 @override
3374 + String get send_templates => "Шаблони";
3375 + @override
3376 String get please_try_to_connect_to_another_node => "Будь ласка, спробуйте підключитися до іншого вузлу";
3377 @override
3378 String get trade_state_traded => "Операція виконана";
@@ -3294,6 +3397,8 @@ class $uk extends S {
3397 @override
3398 String get seed_language_portuguese => "Португальська";
3399 @override
3400 + String get send_new => "Новий";
3401 + @override
3402 String get setup_pin => "Встановити PIN";
3403 @override
3404 String get transaction_details_recipient_address => "Адреса отримувача";
@@ -3308,6 +3413,8 @@ class $uk extends S {
3413 @override
3414 String get trade_state_trading => "Виконання операції";
3415 @override
3416 + String get send_sending => "Відправлення...";
3417 + @override
3418 String get error_text_address => "Адреса гаманця повинна відповідати типу\nкриптовалюти";
3419 @override
3420 String get send_your_wallet => "Ваш гаманець";
@@ -3334,7 +3441,7 @@ class $uk extends S {
3441 @override
3442 String get copy_address => "Cкопіювати адресу";
3443 @override
3337 - String get error_text_subaddress_name => "Ім'я субадреси не може містити ` , ' \" символи\nі може бути від 1 до 32 символів в довжину";
3444 + String get error_text_subaddress_name => "Ім'я субадреси не може містити ` , ' \" символи\nі може бути від 1 до 20 символів в довжину";
3445 @override
3446 String get incorrect_seed => "Введений текст невірний.";
3447 @override
@@ -3436,6 +3543,8 @@ class $uk extends S {
3543 @override
3544 String get paste => "Вставити";
3545 @override
3546 + String get send_got_it => "Зрозумів";
3547 + @override
3548 String get widgets_or => "або";
3549 @override
3550 String get remove => "Видалити";
@@ -3444,12 +3553,16 @@ class $uk extends S {
3553 @override
3554 String get yesterday => "Вчора";
3555 @override
3556 + String get send_amount => "Сума:";
3557 + @override
3558 String get expired => "Закінчується";
3559 @override
3560 String get transaction_priority_regular => "Звичайний";
3561 @override
3562 String get trade_details_created_at => "Створено";
3563 @override
3564 + String get send_success => "Ваш Monero успішно надісланий";
3565 + @override
3566 String get settings_wallets => "Гаманці";
3567 @override
3568 String get settings_only_transactions => "Транзакції";
@@ -3472,6 +3585,8 @@ class $uk extends S {
3585 @override
3586 String get nodes => "Вузли";
3587 @override
3588 + String get error_text_template => "Ім'я та адреса шаблону не може містити ` , ' \" символи\nі може бути від 1 до 106 символів в довжину";
3589 + @override
3590 String get seed_share => "Поділитися мнемонічною фразою";
3591 @override
3592 String get widgets_restore_from_blockheight => "Відновити на висоті блоку";
@@ -3608,6 +3723,8 @@ class $uk extends S {
3723 @override
3724 String get restore_active_seed => "Активна мнемонічна фраза";
3725 @override
3726 + String get send_name => "Ім'я";
3727 + @override
3728 String get settings_personal => "Персональні";
3729 @override
3730 String get seed_title => "Мнемонічна фраза";
@@ -3842,6 +3959,8 @@ class $ja extends S {
3959 @override
3960 String get transaction_sent => "トランザクションが送信されました!";
3961 @override
3962 + String get send_fee => "費用:";
3963 + @override
3964 String get password => "パスワード";
3965 @override
3966 String get you_will_get => "あなたが取得します";
@@ -3854,6 +3973,8 @@ class $ja extends S {
3973 @override
3974 String get share_address => "住所を共有する";
3975 @override
3976 + String get send_templates => "テンプレート";
3977 + @override
3978 String get please_try_to_connect_to_another_node => "別のノードに接続してみてください";
3979 @override
3980 String get trade_state_traded => "取引済み";
@@ -3878,6 +3999,8 @@ class $ja extends S {
3999 @override
4000 String get seed_language_portuguese => "ポルトガル語";
4001 @override
4002 + String get send_new => "新着";
4003 + @override
4004 String get setup_pin => "PINのセットアップ";
4005 @override
4006 String get transaction_details_recipient_address => "受取人の住所";
@@ -3892,6 +4015,8 @@ class $ja extends S {
4015 @override
4016 String get trade_state_trading => "トレーディング";
4017 @override
4018 + String get send_sending => "送信...";
4019 + @override
4020 String get error_text_address => "ウォレットアドレスは、\n暗号通貨";
4021 @override
4022 String get send_your_wallet => "あなたの財布";
@@ -4020,6 +4145,8 @@ class $ja extends S {
4145 @override
4146 String get paste => "ペースト";
4147 @override
4148 + String get send_got_it => "とった";
4149 + @override
4150 String get widgets_or => "または";
4151 @override
4152 String get remove => "削除する";
@@ -4028,12 +4155,16 @@ class $ja extends S {
4155 @override
4156 String get yesterday => "昨日";
4157 @override
4158 + String get send_amount => "量:";
4159 + @override
4160 String get expired => "期限切れ";
4161 @override
4162 String get transaction_priority_regular => "レギュラー";
4163 @override
4164 String get trade_details_created_at => "で作成";
4165 @override
4166 + String get send_success => "Moneroが送信されました";
4167 + @override
4168 String get settings_wallets => "財布";
4169 @override
4170 String get settings_only_transactions => "トランザクションのみ";
@@ -4056,6 +4187,8 @@ class $ja extends S {
4187 @override
4188 String get nodes => "ノード";
4189 @override
4190 + String get error_text_template => "テンプレートの名前とアドレスに含めることはできません ` , ' \" シンボル\n1〜106文字の長さである必要があります";
4191 + @override
4192 String get seed_share => "シードを共有する";
4193 @override
4194 String get widgets_restore_from_blockheight => "ブロックの高さから復元";
@@ -4192,6 +4325,8 @@ class $ja extends S {
4325 @override
4326 String get restore_active_seed => "アクティブシード";
4327 @override
4328 + String get send_name => "名前";
4329 + @override
4330 String get settings_personal => "パーソナル";
4331 @override
4332 String get seed_title => "シード";
@@ -4430,6 +4565,8 @@ class $pl extends S {
4565 @override
4566 String get transaction_sent => "Transakcja wysłana!";
4567 @override
4568 + String get send_fee => "Opłata:";
4569 + @override
4570 String get password => "Hasło";
4571 @override
4572 String get you_will_get => "Dostaniesz";
@@ -4442,6 +4579,8 @@ class $pl extends S {
4579 @override
4580 String get share_address => "Udostępnij adres";
4581 @override
4582 + String get send_templates => "Szablony";
4583 + @override
4584 String get please_try_to_connect_to_another_node => "Spróbuj połączyć się z innym węzłem";
4585 @override
4586 String get trade_state_traded => "Handlowane";
@@ -4466,6 +4605,8 @@ class $pl extends S {
4605 @override
4606 String get seed_language_portuguese => "Portugalski";
4607 @override
4608 + String get send_new => "Nowy";
4609 + @override
4610 String get setup_pin => "Ustaw PIN";
4611 @override
4612 String get transaction_details_recipient_address => "Adres odbiorcy";
@@ -4480,6 +4621,8 @@ class $pl extends S {
4621 @override
4622 String get trade_state_trading => "Handlowy";
4623 @override
4624 + String get send_sending => "Wysyłanie...";
4625 + @override
4626 String get error_text_address => "Wallet address must correspond to the type\nof cryptocurrency";
4627 @override
4628 String get send_your_wallet => "Twój portfel";
@@ -4608,6 +4751,8 @@ class $pl extends S {
4751 @override
4752 String get paste => "Pasta";
4753 @override
4754 + String get send_got_it => "Rozumiem";
4755 + @override
4756 String get widgets_or => "lub";
4757 @override
4758 String get remove => "Usunąć";
@@ -4616,12 +4761,16 @@ class $pl extends S {
4761 @override
4762 String get yesterday => "Wczoraj";
4763 @override
4764 + String get send_amount => "Ilość:";
4765 + @override
4766 String get expired => "Przedawniony";
4767 @override
4768 String get transaction_priority_regular => "Regularny";
4769 @override
4770 String get trade_details_created_at => "Utworzono w";
4771 @override
4772 + String get send_success => "Twoje Monero zostało pomyślnie wysłane";
4773 + @override
4774 String get settings_wallets => "Portfele";
4775 @override
4776 String get settings_only_transactions => "Tylko transakcje";
@@ -4644,6 +4793,8 @@ class $pl extends S {
4793 @override
4794 String get nodes => "Węzły";
4795 @override
4796 + String get error_text_template => "Nazwa i adres szablonu nie mogą zawierać ` , ' \" symbolika\ni musi mieć od 1 do 106 znaków";
4797 + @override
4798 String get seed_share => "Udostępnij ziarno";
4799 @override
4800 String get widgets_restore_from_blockheight => "Przywróć z wysokości bloku";
@@ -4780,6 +4931,8 @@ class $pl extends S {
4931 @override
4932 String get restore_active_seed => "Aktywne nasiona";
4933 @override
4934 + String get send_name => "Imię";
4935 + @override
4936 String get settings_personal => "Osobisty";
4937 @override
4938 String get seed_title => "Ziarno";
@@ -5014,6 +5167,8 @@ class $es extends S {
5167 @override
5168 String get transaction_sent => "Transacción enviada!";
5169 @override
5170 + String get send_fee => "Cuota:";
5171 + @override
5172 String get password => "Contraseña";
5173 @override
5174 String get you_will_get => "Conseguirás";
@@ -5026,6 +5181,8 @@ class $es extends S {
5181 @override
5182 String get share_address => "Compartir dirección";
5183 @override
5184 + String get send_templates => "Plantillas";
5185 + @override
5186 String get please_try_to_connect_to_another_node => "Intenta conectarte a otro nodo";
5187 @override
5188 String get trade_state_traded => "Negociado";
@@ -5050,6 +5207,8 @@ class $es extends S {
5207 @override
5208 String get seed_language_portuguese => "Portugués";
5209 @override
5210 + String get send_new => "Nuevo";
5211 + @override
5212 String get setup_pin => "PIN de configuración";
5213 @override
5214 String get transaction_details_recipient_address => "Dirección del receptor";
@@ -5064,6 +5223,8 @@ class $es extends S {
5223 @override
5224 String get trade_state_trading => "Comercio";
5225 @override
5226 + String get send_sending => "Enviando...";
5227 + @override
5228 String get error_text_address => "La dirección de la billetera debe corresponder al tipo \nde criptomoneda";
5229 @override
5230 String get send_your_wallet => "Tu billetera";
@@ -5192,6 +5353,8 @@ class $es extends S {
5353 @override
5354 String get paste => "Pegar";
5355 @override
5356 + String get send_got_it => "Entendido";
5357 + @override
5358 String get widgets_or => "o";
5359 @override
5360 String get remove => "Retirar";
@@ -5200,12 +5363,16 @@ class $es extends S {
5363 @override
5364 String get yesterday => "Ayer";
5365 @override
5366 + String get send_amount => "Cantidad:";
5367 + @override
5368 String get expired => "Muerto";
5369 @override
5370 String get transaction_priority_regular => "Regular";
5371 @override
5372 String get trade_details_created_at => "Creado en";
5373 @override
5374 + String get send_success => "Su Monero fue enviado con éxito";
5375 + @override
5376 String get settings_wallets => "Carteras";
5377 @override
5378 String get settings_only_transactions => "Solo transacciones";
@@ -5228,6 +5395,8 @@ class $es extends S {
5395 @override
5396 String get nodes => "Nodos";
5397 @override
5398 + String get error_text_template => "El nombre y la dirección de la plantilla no pueden contener símbolos ` , '\" \ny debe tener entre 1 y 106 caracteres de longitud";
5399 + @override
5400 String get seed_share => "Compartir semillas";
5401 @override
5402 String get widgets_restore_from_blockheight => "Restaurar desde blockheight";
@@ -5364,6 +5533,8 @@ class $es extends S {
5533 @override
5534 String get restore_active_seed => "Semilla activa";
5535 @override
5536 + String get send_name => "Nombre";
5537 + @override
5538 String get settings_personal => "Personal";
5539 @override
5540 String get seed_title => "Semilla";
@@ -5598,6 +5769,8 @@ class $nl extends S {
5769 @override
5770 String get transaction_sent => "Transactie verzonden!";
5771 @override
5772 + String get send_fee => "Vergoeding:";
5773 + @override
5774 String get password => "Wachtwoord";
5775 @override
5776 String get you_will_get => "Je zult krijgen";
@@ -5610,6 +5783,8 @@ class $nl extends S {
5783 @override
5784 String get share_address => "Deel adres";
5785 @override
5786 + String get send_templates => "Sjablonen";
5787 + @override
5788 String get please_try_to_connect_to_another_node => "Probeer verbinding te maken met een ander knooppunt";
5789 @override
5790 String get trade_state_traded => "Traded";
@@ -5634,6 +5809,8 @@ class $nl extends S {
5809 @override
5810 String get seed_language_portuguese => "Portugees";
5811 @override
5812 + String get send_new => "Nieuw";
5813 + @override
5814 String get setup_pin => "PIN instellen";
5815 @override
5816 String get transaction_details_recipient_address => "Adres van de ontvanger";
@@ -5648,6 +5825,8 @@ class $nl extends S {
5825 @override
5826 String get trade_state_trading => "Handel";
5827 @override
5828 + String get send_sending => "Bezig met verzenden...";
5829 + @override
5830 String get error_text_address => "Portemonnee-adres moet overeenkomen met het type\nvan cryptocurrency";
5831 @override
5832 String get send_your_wallet => "Uw portemonnee";
@@ -5776,6 +5955,8 @@ class $nl extends S {
5955 @override
5956 String get paste => "Plakken";
5957 @override
5958 + String get send_got_it => "Ik snap het";
5959 + @override
5960 String get widgets_or => "of";
5961 @override
5962 String get remove => "Verwijderen";
@@ -5784,12 +5965,16 @@ class $nl extends S {
5965 @override
5966 String get yesterday => "Gisteren";
5967 @override
5968 + String get send_amount => "Bedrag:";
5969 + @override
5970 String get expired => "Verlopen";
5971 @override
5972 String get transaction_priority_regular => "Regelmatig";
5973 @override
5974 String get trade_details_created_at => "Gemaakt bij";
5975 @override
5976 + String get send_success => "Uw Monero is succesvol verzonden";
5977 + @override
5978 String get settings_wallets => "Portemonnee";
5979 @override
5980 String get settings_only_transactions => "Alleen transacties";
@@ -5812,6 +5997,8 @@ class $nl extends S {
5997 @override
5998 String get nodes => "Knooppunten";
5999 @override
6000 + String get error_text_template => "Sjabloonnaam en -adres mogen niet bevatten ` , ' \" symbolen\nen moet tussen de 1 en 106 tekens lang zijn";
6001 + @override
6002 String get seed_share => "Deel zaad";
6003 @override
6004 String get widgets_restore_from_blockheight => "Herstel vanaf blockheight";
@@ -5948,6 +6135,8 @@ class $nl extends S {
6135 @override
6136 String get restore_active_seed => "Actief zaad";
6137 @override
6138 + String get send_name => "Naam";
6139 + @override
6140 String get settings_personal => "Persoonlijk";
6141 @override
6142 String get seed_title => "Zaad";
@@ -6182,6 +6371,8 @@ class $zh extends S {
6371 @override
6372 String get transaction_sent => "交易已发送";
6373 @override
6374 + String get send_fee => "費用:";
6375 + @override
6376 String get password => "密码";
6377 @override
6378 String get you_will_get => "你会得到";
@@ -6194,6 +6385,8 @@ class $zh extends S {
6385 @override
6386 String get share_address => "分享地址";
6387 @override
6388 + String get send_templates => "範本";
6389 + @override
6390 String get please_try_to_connect_to_another_node => "请尝试连接到另一个节点";
6391 @override
6392 String get trade_state_traded => "交易";
@@ -6218,6 +6411,8 @@ class $zh extends S {
6411 @override
6412 String get seed_language_portuguese => "葡萄牙語";
6413 @override
6414 + String get send_new => "新";
6415 + @override
6416 String get setup_pin => "设定PIN码";
6417 @override
6418 String get transaction_details_recipient_address => "收件人地址";
@@ -6232,6 +6427,8 @@ class $zh extends S {
6427 @override
6428 String get trade_state_trading => "贸易";
6429 @override
6430 + String get send_sending => "正在發送...";
6431 + @override
6432 String get error_text_address => "钱包地址必须与类型对应\n加密货币";
6433 @override
6434 String get send_your_wallet => "你的钱包";
@@ -6360,6 +6557,8 @@ class $zh extends S {
6557 @override
6558 String get paste => "糊";
6559 @override
6560 + String get send_got_it => "得到它了";
6561 + @override
6562 String get widgets_or => "要么";
6563 @override
6564 String get remove => "去掉";
@@ -6368,12 +6567,16 @@ class $zh extends S {
6567 @override
6568 String get yesterday => "昨天";
6569 @override
6570 + String get send_amount => "量:";
6571 + @override
6572 String get expired => "已过期";
6573 @override
6574 String get transaction_priority_regular => "定期";
6575 @override
6576 String get trade_details_created_at => "创建于";
6577 @override
6578 + String get send_success => "你Monero已成功發送";
6579 + @override
6580 String get settings_wallets => "皮夹";
6581 @override
6582 String get settings_only_transactions => "仅交易";
@@ -6396,6 +6599,8 @@ class $zh extends S {
6599 @override
6600 String get nodes => "节点";
6601 @override
6602 + String get error_text_template => "模板名稱和地址不能包含`,' \" 符号\n并且必须在1到106个字符之间";
6603 + @override
6604 String get seed_share => "分享种子";
6605 @override
6606 String get widgets_restore_from_blockheight => "从块高还原";
@@ -6532,6 +6737,8 @@ class $zh extends S {
6737 @override
6738 String get restore_active_seed => "活性種子";
6739 @override
6740 + String get send_name => "名稱";
6741 + @override
6742 String get settings_personal => "个人";
6743 @override
6744 String get seed_title => "种子";
lib/main.dart
+7 -1
@@ -21,6 +21,7 @@ import 'package:cake_wallet/src/stores/login/login_store.dart';
21 import 'package:cake_wallet/src/stores/balance/balance_store.dart';
22 import 'package:cake_wallet/src/stores/sync/sync_store.dart';
23 import 'package:cake_wallet/src/stores/wallet/wallet_store.dart';
24 +import 'package:cake_wallet/src/stores/send_template/send_template_store.dart';
25 import 'package:cake_wallet/src/screens/root/root.dart';
26 import 'package:cake_wallet/src/stores/authentication/authentication_store.dart';
27 import 'package:cake_wallet/src/stores/settings/settings_store.dart';
@@ -32,6 +33,7 @@ import 'package:cake_wallet/src/domain/common/default_settings_migration.dart';
33 import 'package:cake_wallet/src/domain/common/fiat_currency.dart';
34 import 'package:cake_wallet/src/domain/common/transaction_priority.dart';
35 import 'package:cake_wallet/src/domain/common/wallet_type.dart';
36 +import 'package:cake_wallet/src/domain/common/template.dart';
37 import 'package:cake_wallet/src/domain/services/wallet_service.dart';
38 import 'package:cake_wallet/generated/i18n.dart';
39 import 'package:cake_wallet/src/domain/common/language.dart';
@@ -48,6 +50,7 @@ void main() async {
50 Hive.registerAdapter(TradeAdapter(), 3);
51 Hive.registerAdapter(WalletInfoAdapter(), 4);
52 Hive.registerAdapter(WalletTypeAdapter(), 5);
53 + Hive.registerAdapter(TemplateAdapter(), 6);
54
55 final secureStorage = FlutterSecureStorage();
56 final transactionDescriptionsBoxKey = await getEncryptionKey(
@@ -65,6 +68,7 @@ void main() async {
68 final trades =
69 await Hive.openBox<Trade>(Trade.boxName, encryptionKey: tradesBoxKey);
70 final walletInfoSource = await Hive.openBox<WalletInfo>(WalletInfo.boxName);
71 + final templates = await Hive.openBox<Template>(Template.boxName);
72
73 final sharedPreferences = await SharedPreferences.getInstance();
74 final walletService = WalletService();
@@ -101,6 +105,7 @@ void main() async {
105 final loginStore = LoginStore(
106 sharedPreferences: sharedPreferences, walletsService: walletListService);
107 final seedLanguageStore = SeedLanguageStore();
108 + final sendTemplateStore = SendTemplateStore(templateSource: templates);
109
110 setReactions(
111 settingsStore: settingsStore,
@@ -126,7 +131,8 @@ void main() async {
131 Provider(create: (_) => nodes),
132 Provider(create: (_) => transactionDescriptions),
133 Provider(create: (_) => trades),
129 - Provider(create: (_) => seedLanguageStore)
134 + Provider(create: (_) => seedLanguageStore),
135 + Provider(create: (_) => sendTemplateStore),
136 ], child: CakeWalletApp()));
137 }
138
lib/router.dart
+8
@@ -88,6 +88,7 @@ import 'package:cake_wallet/src/screens/seed/create_seed_page.dart';
88 import 'package:cake_wallet/src/screens/dashboard/create_dashboard_page.dart';
89 import 'package:cake_wallet/src/screens/welcome/create_welcome_page.dart';
90 import 'package:cake_wallet/src/screens/new_wallet/new_wallet_type_page.dart';
91 +import 'package:cake_wallet/src/screens/send/send_template_page.dart';
92
93 class Router {
94 static Route<dynamic> generateRoute(
@@ -236,6 +237,13 @@ class Router {
237 transactionDescriptions: transactionDescriptions)),
238 ], child: SendPage()));
239
240 + case Routes.sendTemplate:
241 + return CupertinoPageRoute<void>(
242 + builder: (_) => SendTemplatePage(
243 + sendStore: settings.arguments as SendStore,
244 + )
245 + );
246 +
247 case Routes.receive:
248 return CupertinoPageRoute<void>(
249 fullscreenDialog: true,
lib/routes.dart
+1
@@ -45,4 +45,5 @@ class Routes {
45 static const faq = '/faq';
46 static const changeLanguage = '/change_language';
47 static const newWalletType = '/new_wallet_type';
48 + static const sendTemplate = '/send_template';
49 }
\ No newline at end of file
lib/src/domain/common/template.dart new
+22
@@ -0,0 +1,22 @@
1 +import 'package:hive/hive.dart';
2 +
3 +part 'template.g.dart';
4 +
5 +@HiveType()
6 +class Template extends HiveObject {
7 + Template({this.name, this.address, this.cryptoCurrency, this.amount});
8 +
9 + static const boxName = 'Template';
10 +
11 + @HiveField(0)
12 + String name;
13 +
14 + @HiveField(1)
15 + String address;
16 +
17 + @HiveField(2)
18 + String cryptoCurrency;
19 +
20 + @HiveField(3)
21 + String amount;
22 +}
\ No newline at end of file
lib/src/screens/send/send_page.dart
+64 -41
@@ -27,6 +27,8 @@ import 'package:cake_wallet/src/widgets/alert_with_one_action.dart';
27 import 'package:cake_wallet/src/widgets/alert_with_two_actions.dart';
28 import 'package:cake_wallet/src/screens/send/widgets/confirm_sending_alert.dart';
29 import 'package:cake_wallet/src/screens/send/widgets/sending_alert.dart';
30 +import 'package:cake_wallet/src/screens/send/widgets/template_tile.dart';
31 +import 'package:cake_wallet/src/stores/send_template/send_template_store.dart';
32
33 class SendPage extends BasePage {
34 @override
@@ -97,6 +99,7 @@ class SendFormState extends State<SendForm> {
99 final balanceStore = Provider.of<BalanceStore>(context);
100 final walletStore = Provider.of<WalletStore>(context);
101 final syncStore = Provider.of<SyncStore>(context);
102 + final sendTemplateStore = Provider.of<SendTemplateStore>(context);
103
104 _setEffects(context);
105
@@ -280,7 +283,7 @@ class SendFormState extends State<SendForm> {
283 mainAxisAlignment: MainAxisAlignment.start,
284 children: <Widget>[
285 Text(
283 - 'Templates',
286 + S.of(context).send_templates,
287 style: TextStyle(
288 fontSize: 18,
289 fontWeight: FontWeight.w600,
@@ -294,47 +297,67 @@ class SendFormState extends State<SendForm> {
297 height: 40,
298 width: double.infinity,
299 padding: EdgeInsets.only(left: 24),
297 - child: ListView.builder(
298 - scrollDirection: Axis.horizontal,
299 - itemCount: 1,
300 - itemBuilder: (context, index) {
301 -
302 - if (index == 0) {
303 - return GestureDetector(
304 - onTap: () {},
305 - child: Container(
306 - padding: EdgeInsets.only(right: 10),
307 - child: DottedBorder(
308 - borderType: BorderType.RRect,
309 - dashPattern: [8, 4],
310 - color: PaletteDark.menuList,
311 - strokeWidth: 2,
312 - radius: Radius.circular(20),
300 + child: Observer(
301 + builder: (_) {
302 + final itemCount = sendTemplateStore.templates.length + 1;
303 +
304 + return ListView.builder(
305 + scrollDirection: Axis.horizontal,
306 + itemCount: itemCount,
307 + itemBuilder: (context, index) {
308 +
309 + if (index == 0) {
310 + return GestureDetector(
311 + onTap: () => Navigator.of(context)
312 + .pushNamed(Routes.sendTemplate, arguments: sendStore),
313 child: Container(
314 - height: 40,
315 - width: 75,
316 - padding: EdgeInsets.only(left: 10, right: 10),
317 - alignment: Alignment.center,
318 - decoration: BoxDecoration(
319 - borderRadius: BorderRadius.all(Radius.circular(20)),
320 - color: Colors.transparent,
321 - ),
322 - child: Text(
323 - 'New',
324 - style: TextStyle(
325 - fontSize: 14,
326 - fontWeight: FontWeight.w600,
327 - color: PaletteDark.walletCardText
328 - ),
314 + padding: EdgeInsets.only(right: 10),
315 + child: DottedBorder(
316 + borderType: BorderType.RRect,
317 + dashPattern: [8, 4],
318 + color: PaletteDark.menuList,
319 + strokeWidth: 2,
320 + radius: Radius.circular(20),
321 + child: Container(
322 + height: 40,
323 + width: 75,
324 + padding: EdgeInsets.only(left: 10, right: 10),
325 + alignment: Alignment.center,
326 + decoration: BoxDecoration(
327 + borderRadius: BorderRadius.all(Radius.circular(20)),
328 + color: Colors.transparent,
329 + ),
330 + child: Text(
331 + S.of(context).send_new,
332 + style: TextStyle(
333 + fontSize: 14,
334 + fontWeight: FontWeight.w600,
335 + color: PaletteDark.walletCardText
336 + ),
337 + ),
338 + )
339 ),
330 - )
331 - ),
332 - ),
333 - );
334 - }
340 + ),
341 + );
342 + }
343 +
344 + index -= 1;
345 +
346 + final template = sendTemplateStore.templates[index];
347
336 - return Container();
337 - }
348 + return TemplateTile(
349 + name: template.name,
350 + amount: template.amount,
351 + cryptoCurrency: template.cryptoCurrency,
352 + onTap: () {
353 + _addressController.text = template.address;
354 + _cryptoAmountController.text = template.amount;
355 + getOpenaliasRecord(context);
356 + }
357 + );
358 + }
359 + );
360 + }
361 ),
362 )
363 ],
@@ -450,9 +473,9 @@ class SendFormState extends State<SendForm> {
473 builder: (BuildContext context) {
474 return ConfirmSendingAlert(
475 alertTitle: S.of(context).confirm_sending,
453 - amount: 'Amount:',
476 + amount: S.of(context).send_amount,
477 amountValue: sendStore.pendingTransaction.amount,
455 - fee: 'Fee:',
478 + fee: S.of(context).send_fee,
479 feeValue: sendStore.pendingTransaction.fee,
480 leftButtonText: S.of(context).ok,
481 rightButtonText: S.of(context).cancel,
lib/src/screens/send/send_template_page.dart new
+311
@@ -0,0 +1,311 @@
1 +import 'package:cake_wallet/src/widgets/scollable_with_bottom_section.dart';
2 +import 'package:flutter/cupertino.dart';
3 +import 'package:flutter/material.dart';
4 +import 'package:flutter/services.dart';
5 +import 'package:flutter_mobx/flutter_mobx.dart';
6 +import 'package:mobx/mobx.dart';
7 +import 'package:provider/provider.dart';
8 +import 'package:cake_wallet/palette.dart';
9 +import 'package:cake_wallet/src/widgets/address_text_field.dart';
10 +import 'package:cake_wallet/src/widgets/primary_button.dart';
11 +import 'package:cake_wallet/src/stores/settings/settings_store.dart';
12 +import 'package:cake_wallet/src/stores/balance/balance_store.dart';
13 +import 'package:cake_wallet/src/stores/send/send_store.dart';
14 +import 'package:cake_wallet/src/screens/base_page.dart';
15 +import 'package:cake_wallet/generated/i18n.dart';
16 +import 'package:cake_wallet/src/widgets/top_panel.dart';
17 +import 'package:cake_wallet/src/stores/send_template/send_template_store.dart';
18 +
19 +class SendTemplatePage extends BasePage {
20 + SendTemplatePage({@required this.sendStore});
21 +
22 + final SendStore sendStore;
23 +
24 + @override
25 + String get title => S.current.send_title;
26 +
27 + @override
28 + Color get backgroundColor => PaletteDark.menuList;
29 +
30 + @override
31 + bool get resizeToAvoidBottomPadding => false;
32 +
33 + @override
34 + Widget body(BuildContext context) => SendTemplateForm(sendStore);
35 +}
36 +
37 +class SendTemplateForm extends StatefulWidget {
38 + SendTemplateForm(this.sendStore);
39 +
40 + final SendStore sendStore;
41 +
42 + @override
43 + SendTemplateFormState createState() => SendTemplateFormState(sendStore);
44 +}
45 +
46 +class SendTemplateFormState extends State<SendTemplateForm> {
47 + SendTemplateFormState(this.sendStore);
48 +
49 + final SendStore sendStore;
50 +
51 + final _nameController = TextEditingController();
52 + final _addressController = TextEditingController();
53 + final _cryptoAmountController = TextEditingController();
54 + final _fiatAmountController = TextEditingController();
55 +
56 + final _formKey = GlobalKey<FormState>();
57 +
58 + bool _effectsInstalled = false;
59 +
60 + @override
61 + void dispose() {
62 + _nameController.dispose();
63 + _addressController.dispose();
64 + _cryptoAmountController.dispose();
65 + _fiatAmountController.dispose();
66 + super.dispose();
67 + }
68 +
69 + @override
70 + Widget build(BuildContext context) {
71 + final settingsStore = Provider.of<SettingsStore>(context);
72 + final balanceStore = Provider.of<BalanceStore>(context);
73 + final sendTemplateStore = Provider.of<SendTemplateStore>(context);
74 +
75 + _setEffects(context, sendStore);
76 +
77 + return Container(
78 + color: PaletteDark.historyPanel,
79 + child: ScrollableWithBottomSection(
80 + contentPadding: EdgeInsets.only(bottom: 24),
81 + content: Column(
82 + children: <Widget>[
83 + TopPanel(
84 + color: PaletteDark.menuList,
85 + widget: Form(
86 + key: _formKey,
87 + child: Column(children: <Widget>[
88 + TextFormField(
89 + style: TextStyle(
90 + fontSize: 16.0,
91 + color: Colors.white),
92 + controller: _nameController,
93 + decoration: InputDecoration(
94 + hintStyle: TextStyle(
95 + fontSize: 16.0,
96 + color: PaletteDark.walletCardText),
97 + hintText: S.of(context).send_name,
98 + focusedBorder: UnderlineInputBorder(
99 + borderSide: BorderSide(
100 + color: PaletteDark.walletCardSubAddressField,
101 + width: 1.0)),
102 + enabledBorder: UnderlineInputBorder(
103 + borderSide: BorderSide(
104 + color: PaletteDark.walletCardSubAddressField,
105 + width: 1.0))),
106 + validator: (value) {
107 + sendTemplateStore.validateTemplate(value);
108 + return sendTemplateStore.errorMessage;
109 + },
110 + ),
111 + Padding(
112 + padding: EdgeInsets.only(top: 20),
113 + child: AddressTextField(
114 + controller: _addressController,
115 + placeholder: S.of(context).send_monero_address,
116 + onURIScanned: (uri) {
117 + var address = '';
118 + var amount = '';
119 +
120 + if (uri != null) {
121 + address = uri.path;
122 + amount = uri.queryParameters['tx_amount'];
123 + } else {
124 + address = uri.toString();
125 + }
126 +
127 + _addressController.text = address;
128 + _cryptoAmountController.text = amount;
129 + },
130 + options: [
131 + AddressTextFieldOption.qrCode,
132 + AddressTextFieldOption.addressBook
133 + ],
134 + validator: (value) {
135 + sendTemplateStore.validateTemplate(value);
136 + return sendTemplateStore.errorMessage;
137 + },
138 + ),
139 + ),
140 + Observer(
141 + builder: (_) {
142 + return Padding(
143 + padding: const EdgeInsets.only(top: 20),
144 + child: TextFormField(
145 + style: TextStyle(
146 + fontSize: 16.0,
147 + color: Colors.white
148 + ),
149 + controller: _cryptoAmountController,
150 + keyboardType: TextInputType.numberWithOptions(
151 + signed: false, decimal: true),
152 + inputFormatters: [
153 + BlacklistingTextInputFormatter(
154 + RegExp('[\\-|\\ |\\,]'))
155 + ],
156 + decoration: InputDecoration(
157 + prefixIcon: Padding(
158 + padding: EdgeInsets.only(top: 12),
159 + child: Text('XMR:',
160 + style: TextStyle(
161 + fontSize: 16,
162 + fontWeight: FontWeight.bold,
163 + color: Colors.white,
164 + )),
165 + ),
166 + suffixIcon: Padding(
167 + padding: EdgeInsets.only(
168 + bottom: 5
169 + ),
170 + child: Row(
171 + mainAxisSize: MainAxisSize.min,
172 + mainAxisAlignment: MainAxisAlignment.spaceBetween,
173 + children: <Widget>[
174 + Container(
175 + width: MediaQuery.of(context).size.width/2,
176 + alignment: Alignment.centerLeft,
177 + child: Text(
178 + ' / ' + balanceStore.unlockedBalance,
179 + maxLines: 1,
180 + overflow: TextOverflow.ellipsis,
181 + style: TextStyle(
182 + fontSize: 16,
183 + color: PaletteDark.walletCardText
184 + )
185 + ),
186 + ),
187 + ],
188 + ),
189 + ),
190 + hintStyle: TextStyle(
191 + fontSize: 16.0,
192 + color: Colors.white),
193 + hintText: '0.0000',
194 + focusedBorder: UnderlineInputBorder(
195 + borderSide: BorderSide(
196 + color: PaletteDark.walletCardSubAddressField,
197 + width: 1.0)),
198 + enabledBorder: UnderlineInputBorder(
199 + borderSide: BorderSide(
200 + color: PaletteDark.walletCardSubAddressField,
201 + width: 1.0))),
202 + validator: (value) {
203 + sendStore.validateXMR(
204 + value, balanceStore.unlockedBalance);
205 + return sendStore.errorMessage;
206 + }),
207 + );
208 + }
209 + ),
210 + Padding(
211 + padding: const EdgeInsets.only(top: 20),
212 + child: TextFormField(
213 + style: TextStyle(
214 + fontSize: 16.0,
215 + color: Colors.white),
216 + controller: _fiatAmountController,
217 + keyboardType: TextInputType.numberWithOptions(
218 + signed: false, decimal: true),
219 + inputFormatters: [
220 + BlacklistingTextInputFormatter(
221 + RegExp('[\\-|\\ |\\,]'))
222 + ],
223 + decoration: InputDecoration(
224 + prefixIcon: Padding(
225 + padding: EdgeInsets.only(top: 12),
226 + child: Text(
227 + '${settingsStore.fiatCurrency.toString()}:',
228 + style: TextStyle(
229 + fontSize: 16,
230 + fontWeight: FontWeight.bold,
231 + color: Colors.white,
232 + )),
233 + ),
234 + hintStyle: TextStyle(
235 + fontSize: 16.0,
236 + color: PaletteDark.walletCardText),
237 + hintText: '0.00',
238 + focusedBorder: UnderlineInputBorder(
239 + borderSide: BorderSide(
240 + color: PaletteDark.walletCardSubAddressField,
241 + width: 1.0)),
242 + enabledBorder: UnderlineInputBorder(
243 + borderSide: BorderSide(
244 + color: PaletteDark.walletCardSubAddressField,
245 + width: 1.0)))),
246 + ),
247 + ]),
248 + ),
249 + ),
250 + ],
251 + ),
252 + bottomSectionPadding: EdgeInsets.only(left: 24, right: 24, bottom: 24),
253 + bottomSection: PrimaryButton(
254 + onPressed: () {
255 + if (_formKey.currentState.validate()) {
256 + sendTemplateStore.addTemplate(
257 + name: _nameController.text,
258 + address: _addressController.text,
259 + cryptoCurrency: 'XMR',
260 + amount: _cryptoAmountController.text
261 + );
262 + sendTemplateStore.update();
263 + Navigator.of(context).pop();
264 + }
265 + },
266 + text: S.of(context).save,
267 + color: Colors.blue,
268 + textColor: Colors.white
269 + ),
270 + ),
271 + );
272 + }
273 +
274 + void _setEffects(BuildContext context, SendStore sendStore) {
275 + if (_effectsInstalled) {
276 + return;
277 + }
278 +
279 + //final sendStore = Provider.of<SendStore>(context);
280 +
281 + reaction((_) => sendStore.fiatAmount, (String amount) {
282 + if (amount != _fiatAmountController.text) {
283 + _fiatAmountController.text = amount;
284 + }
285 + });
286 +
287 + reaction((_) => sendStore.cryptoAmount, (String amount) {
288 + if (amount != _cryptoAmountController.text) {
289 + _cryptoAmountController.text = amount;
290 + }
291 + });
292 +
293 + _fiatAmountController.addListener(() {
294 + final fiatAmount = _fiatAmountController.text;
295 +
296 + if (sendStore.fiatAmount != fiatAmount) {
297 + sendStore.changeFiatAmount(fiatAmount);
298 + }
299 + });
300 +
301 + _cryptoAmountController.addListener(() {
302 + final cryptoAmount = _cryptoAmountController.text;
303 +
304 + if (sendStore.cryptoAmount != cryptoAmount) {
305 + sendStore.changeCryptoAmount(cryptoAmount);
306 + }
307 + });
308 +
309 + _effectsInstalled = true;
310 + }
311 +}
\ No newline at end of file
lib/src/screens/send/widgets/sending_alert.dart
+3 -3
@@ -41,7 +41,7 @@ class SendingAlertState extends State<SendingAlert> {
41 child: Padding(
42 padding: EdgeInsets.only(top: 220, left: 24, right: 24),
43 child: Text(
44 - 'Your Monero was successfully sent',
44 + S.of(context).send_success,
45 textAlign: TextAlign.center,
46 style: TextStyle(
47 fontSize: 22,
@@ -58,7 +58,7 @@ class SendingAlertState extends State<SendingAlert> {
58 bottom: 24,
59 child: PrimaryButton(
60 onPressed: () => Navigator.of(context).pop(),
61 - text: 'Got it',
61 + text: S.of(context).send_got_it,
62 color: Colors.blue,
63 textColor: Colors.white
64 )
@@ -84,7 +84,7 @@ class SendingAlertState extends State<SendingAlert> {
84 child: Padding(
85 padding: EdgeInsets.only(top: 220),
86 child: Text(
87 - 'Sending...',
87 + S.of(context).send_sending,
88 textAlign: TextAlign.center,
89 style: TextStyle(
90 fontSize: 22,
lib/src/screens/send/widgets/template_tile.dart new
+76
@@ -0,0 +1,76 @@
1 +import 'package:flutter/material.dart';
2 +import 'package:cake_wallet/palette.dart';
3 +
4 +class TemplateTile extends StatelessWidget {
5 + TemplateTile({
6 + @required this.name,
7 + @required this.amount,
8 + @required this.cryptoCurrency,
9 + @required this.onTap
10 + });
11 +
12 + final String name;
13 + final String amount;
14 + final String cryptoCurrency;
15 + final VoidCallback onTap;
16 +
17 + final toIcon = Image.asset('assets/images/to_icon.png');
18 +
19 + @override
20 + Widget build(BuildContext context) {
21 + return Container(
22 + padding: EdgeInsets.only(right: 10),
23 + child: GestureDetector(
24 + onTap: onTap,
25 + child: Container(
26 + height: 40,
27 + padding: EdgeInsets.only(left: 24, right: 24),
28 + decoration: BoxDecoration(
29 + borderRadius: BorderRadius.all(Radius.circular(20)),
30 + color: PaletteDark.menuList
31 + ),
32 + child: Row(
33 + mainAxisAlignment: MainAxisAlignment.start,
34 + mainAxisSize: MainAxisSize.min,
35 + children: <Widget>[
36 + Text(
37 + amount,
38 + style: TextStyle(
39 + fontSize: 16,
40 + fontWeight: FontWeight.w600,
41 + color: Colors.white
42 + ),
43 + ),
44 + Padding(
45 + padding: EdgeInsets.only(left: 5),
46 + child: Text(
47 + cryptoCurrency,
48 + style: TextStyle(
49 + fontSize: 16,
50 + fontWeight: FontWeight.w600,
51 + color: Colors.white
52 + ),
53 + ),
54 + ),
55 + Padding(
56 + padding: EdgeInsets.only(left: 5),
57 + child: toIcon,
58 + ),
59 + Padding(
60 + padding: EdgeInsets.only(left: 5),
61 + child: Text(
62 + name,
63 + style: TextStyle(
64 + fontSize: 16,
65 + fontWeight: FontWeight.w600,
66 + color: Colors.white
67 + ),
68 + ),
69 + ),
70 + ],
71 + ),
72 + ),
73 + ),
74 + );
75 + }
76 +}
\ No newline at end of file
lib/src/stores/send_template/send_template_store.dart new
+48
@@ -0,0 +1,48 @@
1 +import 'dart:async';
2 +import 'package:mobx/mobx.dart';
3 +import 'package:hive/hive.dart';
4 +import 'package:cake_wallet/src/domain/common/template.dart';
5 +import 'package:cake_wallet/generated/i18n.dart';
6 +
7 +part 'send_template_store.g.dart';
8 +
9 +class SendTemplateStore = SendTemplateBase with _$SendTemplateStore;
10 +
11 +abstract class SendTemplateBase with Store {
12 + SendTemplateBase({this.templateSource}) {
13 + templates = ObservableList<Template>();
14 + update();
15 + }
16 +
17 + @observable
18 + ObservableList<Template> templates;
19 +
20 + @observable
21 + bool isValid;
22 +
23 + @observable
24 + String errorMessage;
25 +
26 + Box<Template> templateSource;
27 +
28 + @action
29 + void update() =>
30 + templates.replaceRange(0, templates.length, templateSource.values.toList());
31 +
32 + @action
33 + Future addTemplate({String name, String address, String cryptoCurrency, String amount}) async {
34 + final template = Template(name: name, address: address,
35 + cryptoCurrency: cryptoCurrency, amount: amount);
36 + await templateSource.add(template);
37 + }
38 +
39 + @action
40 + Future remove({Template template}) async => await template.delete();
41 +
42 + void validateTemplate(String value) {
43 + const pattern = '''^[^`,'"]{1,106}\$''';
44 + final regExp = RegExp(pattern);
45 + isValid = regExp.hasMatch(value);
46 + errorMessage = isValid ? null : S.current.error_text_template;
47 + }
48 +}
\ No newline at end of file
res/values/strings_de.arb
+9
@@ -185,6 +185,14 @@
185 "send_estimated_fee" : "Geschätzte Gebühr:",
186 "send_priority" : "Derzeit ist die Gebühr auf festgelegt ${transactionPriority} priorität.\nDie Transaktionspriorität kann in den Einstellungen angepasst werden",
187 "send_creating_transaction" : "Transaktion erstellen",
188 + "send_templates" : "Vorlagen",
189 + "send_new" : "Neu",
190 + "send_amount" : "Menge:",
191 + "send_fee" : "Gebühr:",
192 + "send_name" : "Name",
193 + "send_got_it" : "Ich habs",
194 + "send_sending" : "Senden...",
195 + "send_success" : "Ihr Monero wurde erfolgreich gesendet",
196
197
198 "settings_title" : "die Einstellungen",
@@ -291,6 +299,7 @@
299 "error_text_minimal_limit" : "Handel für ${provider} wird nicht erstellt. Menge ist weniger als minimal: ${min} ${currency}",
300 "error_text_maximum_limit" : "Handel für ${provider} wird nicht erstellt. Menge ist mehr als maximal: ${max} ${currency}",
301 "error_text_limits_loading_failed" : "Handel für ${provider} wird nicht erstellt. Das Laden der Limits ist fehlgeschlagen",
302 + "error_text_template" : "Vorlagenname und Adresse dürfen nicht enthalten ` , ' \" symbole\nund muss zwischen 1 und 106 Zeichen lang sein",
303
304
305 "auth_store_ban_timeout" : "Auszeit verbieten",
res/values/strings_en.arb
+9
@@ -185,6 +185,14 @@
185 "send_estimated_fee" : "Estimated fee:",
186 "send_priority" : "Currently the fee is set at ${transactionPriority} priority.\nTransaction priority can be adjusted in the settings",
187 "send_creating_transaction" : "Creating transaction",
188 + "send_templates" : "Templates",
189 + "send_new" : "New",
190 + "send_amount" : "Amount:",
191 + "send_fee" : "Fee:",
192 + "send_name" : "Name",
193 + "send_got_it" : "Got it",
194 + "send_sending" : "Sending...",
195 + "send_success" : "Your Monero was successfully sent",
196
197
198 "settings_title" : "Settings",
@@ -291,6 +299,7 @@
299 "error_text_minimal_limit" : "Trade for ${provider} is not created. Amount is less then minimal: ${min} ${currency}",
300 "error_text_maximum_limit" : "Trade for ${provider} is not created. Amount is more then maximum: ${max} ${currency}",
301 "error_text_limits_loading_failed" : "Trade for ${provider} is not created. Limits loading failed",
302 + "error_text_template" : "Template name and address can't contain ` , ' \" symbols\nand must be between 1 and 106 characters long",
303
304
305 "auth_store_ban_timeout" : "ban_timeout",
res/values/strings_es.arb
+9
@@ -185,6 +185,14 @@
185 "send_estimated_fee" : "Tarifa estimada:",
186 "send_priority" : "Actualmente la tarifa se establece en ${transactionPriority} prioridad.\nLa prioridad de la transacción se puede ajustar en la configuración",
187 "send_creating_transaction" : "Creando transacción",
188 + "send_templates" : "Plantillas",
189 + "send_new" : "Nuevo",
190 + "send_amount" : "Cantidad:",
191 + "send_fee" : "Cuota:",
192 + "send_name" : "Nombre",
193 + "send_got_it" : "Entendido",
194 + "send_sending" : "Enviando...",
195 + "send_success" : "Su Monero fue enviado con éxito",
196
197
198 "settings_title" : "Configuraciones",
@@ -291,6 +299,7 @@
299 "error_text_minimal_limit" : "El comercio por ${provider} no se crea. La cantidad es menos que mínima: ${min} ${currency}",
300 "error_text_maximum_limit" : "El comercio por ${provider} no se crea. La cantidad es más que el máximo: ${max} ${currency}",
301 "error_text_limits_loading_failed" : "El comercio por ${provider} no se crea. Límites de carga fallidos",
302 + "error_text_template" : "El nombre y la dirección de la plantilla no pueden contener símbolos ` , '\" \ny debe tener entre 1 y 106 caracteres de longitud",
303
304
305 "auth_store_ban_timeout" : "prohibición de tiempo de espera",
res/values/strings_hi.arb
+9
@@ -185,6 +185,14 @@
185 "send_estimated_fee" : "अनुमानित शुल्क:",
186 "send_priority" : "वर्तमान में शुल्क निर्धारित है ${transactionPriority} प्राथमिकता.\nलेन-देन की प्राथमिकता को सेटिंग्स में समायोजित किया जा सकता है",
187 "send_creating_transaction" : "लेन-देन बनाना",
188 + "send_templates" : "टेम्पलेट्स",
189 + "send_new" : "नया",
190 + "send_amount" : "रकम:",
191 + "send_fee" : "शुल्क:",
192 + "send_name" : "नाम",
193 + "send_got_it" : "समझ गया",
194 + "send_sending" : "भेजना...",
195 + "send_success" : "आपका Monero सफलतापूर्वक भेजा गया",
196
197
198 "settings_title" : "सेटिंग्स",
@@ -291,6 +299,7 @@
299 "error_text_minimal_limit" : "व्यापार ${provider} के लिए नहीं बनाया गया है। राशि कम है तो न्यूनतम: ${min} ${currency}",
300 "error_text_maximum_limit" : "व्यापार ${provider} के लिए नहीं बनाया गया है। राशि अधिक है तो अधिकतम: ${max} ${currency}",
301 "error_text_limits_loading_failed" : "व्यापार ${provider} के लिए नहीं बनाया गया है। लोडिंग की सीमाएं विफल रहीं",
302 + "error_text_template" : "टेम्प्लेट का नाम और पता नहीं हो सकता ` , ' \" प्रतीकों\nऔर 1 और 106 वर्णों के बीच लंबा होना चाहिए",
303
304
305 "auth_store_ban_timeout" : "समय की पाबंदी",
res/values/strings_ja.arb
+9
@@ -185,6 +185,14 @@
185 "send_estimated_fee" : "見積手数料:",
186 "send_priority" : "現在、料金は ${transactionPriority} 優先度.\nトランザクションの優先度は設定で調整できます",
187 "send_creating_transaction" : "トランザクションを作成する",
188 + "send_templates" : "テンプレート",
189 + "send_new" : "新着",
190 + "send_amount" : "量:",
191 + "send_fee" : "費用:",
192 + "send_name" : "名前",
193 + "send_got_it" : "とった",
194 + "send_sending" : "送信...",
195 + "send_success" : "Moneroが送信されました",
196
197
198 "settings_title" : "設定",
@@ -291,6 +299,7 @@
299 "error_text_minimal_limit" : "${provider} の取引は作成されません。 金額は最小額より少ない: ${min} ${currency}",
300 "error_text_maximum_limit" : "${provider} の取引は作成されません。 金額は最大値を超えています: ${max} ${currency}",
301 "error_text_limits_loading_failed" : "${provider} の取引は作成されません。 制限の読み込みに失敗しました",
302 + "error_text_template" : "テンプレートの名前とアドレスに含めることはできません ` , ' \" シンボル\n1〜106文字の長さである必要があります",
303
304
305 "auth_store_ban_timeout" : "禁止タイムアウト",
res/values/strings_ko.arb
+9
@@ -185,6 +185,14 @@
185 "send_estimated_fee" : "예상 수수료:",
186 "send_priority" : "현재 수수료는 ${transactionPriority} 우선 순위.\n거래 우선 순위는 설정에서 조정할 수 있습니다",
187 "send_creating_transaction" : "거래 생성",
188 + "send_templates" : "템플릿",
189 + "send_new" : "새로운",
190 + "send_amount" : "양:",
191 + "send_fee" : "회비:",
192 + "send_name" : "이름",
193 + "send_got_it" : "알았다",
194 + "send_sending" : "배상...",
195 + "send_success" : "Monero가 성공적으로 전송되었습니다",
196
197
198 "settings_title" : "설정",
@@ -291,6 +299,7 @@
299 "error_text_minimal_limit" : "거래 ${provider} 가 생성되지 않습니다. 금액이 최소보다 적습니다. ${min} ${currency}",
300 "error_text_maximum_limit" : "거래 ${provider} 가 생성되지 않습니다. 금액이 최대 값보다 많습니다. ${max} ${currency}",
301 "error_text_limits_loading_failed" : "거래 ${provider} 가 생성되지 않습니다. 로딩 실패",
302 + "error_text_template" : "템플릿 이름과 주소는 포함 할 수 없습니다 ` , ' \" 기호 \n1 ~ 106 자 사이 여야합니다",
303
304
305 "auth_store_ban_timeout" : "타임 아웃 금지",
res/values/strings_nl.arb
+9
@@ -185,6 +185,14 @@
185 "send_estimated_fee" : "Geschatte vergoeding:",
186 "send_priority" : "Momenteel is de vergoeding vastgesteld op ${transactionPriority} prioriteit.\nTransactieprioriteit kan worden aangepast in de instellingen",
187 "send_creating_transaction" : "Transactie maken",
188 + "send_templates" : "Sjablonen",
189 + "send_new" : "Nieuw",
190 + "send_amount" : "Bedrag:",
191 + "send_fee" : "Vergoeding:",
192 + "send_name" : "Naam",
193 + "send_got_it" : "Ik snap het",
194 + "send_sending" : "Bezig met verzenden...",
195 + "send_success" : "Uw Monero is succesvol verzonden",
196
197
198 "settings_title" : "Instellingen",
@@ -291,6 +299,7 @@
299 "error_text_minimal_limit" : "Ruil voor ${provider} is niet gemaakt. Bedrag is minder dan minimaal: ${min} ${currency}",
300 "error_text_maximum_limit" : "Ruil voor ${provider} is niet gemaakt. Bedrag is meer dan maximaal: ${max} ${currency}",
301 "error_text_limits_loading_failed" : "Ruil voor ${provider} is niet gemaakt. Beperkingen laden mislukt",
302 + "error_text_template" : "Sjabloonnaam en -adres mogen niet bevatten ` , ' \" symbolen\nen moet tussen de 1 en 106 tekens lang zijn",
303
304
305 "auth_store_ban_timeout" : "time-out verbieden",
res/values/strings_pl.arb
+9
@@ -185,6 +185,14 @@
185 "send_estimated_fee" : "Szacowana opłata:",
186 "send_priority" : "Obecnie opłata ustalona jest na ${transactionPriority} priorytet.\nPriorytet transakcji można zmienić w ustawieniach",
187 "send_creating_transaction" : "Tworzenie transakcji",
188 + "send_templates" : "Szablony",
189 + "send_new" : "Nowy",
190 + "send_amount" : "Ilość:",
191 + "send_fee" : "Opłata:",
192 + "send_name" : "Imię",
193 + "send_got_it" : "Rozumiem",
194 + "send_sending" : "Wysyłanie...",
195 + "send_success" : "Twoje Monero zostało pomyślnie wysłane",
196
197
198 "settings_title" : "Ustawienia",
@@ -291,6 +299,7 @@
299 "error_text_minimal_limit" : "Wymiana dla ${provider} nie została utworzona. Kwota jest mniejsza niż minimalna: ${min} ${currency}",
300 "error_text_maximum_limit" : "Wymiana dla ${provider} nie została utworzona. Kwota jest większa niż maksymalna: ${max} ${currency}",
301 "error_text_limits_loading_failed" : "Wymiana dla ${provider} nie została utworzona. Ładowanie limitów nie powiodło się",
302 + "error_text_template" : "Nazwa i adres szablonu nie mogą zawierać ` , ' \" symbolika\ni musi mieć od 1 do 106 znaków",
303
304
305 "auth_store_ban_timeout" : "przekroczenie limitu czasu",
res/values/strings_pt.arb
+9
@@ -185,6 +185,14 @@
185 "send_estimated_fee" : "Taxa estimada:",
186 "send_priority" : "Atualmente, a taxa está definida para a prioridade: ${transactionPriority}.\nA prioridade da transação pode ser ajustada nas configurações",
187 "send_creating_transaction" : "Criando transação",
188 + "send_templates" : "Modelos",
189 + "send_new" : "Novo",
190 + "send_amount" : "Montante:",
191 + "send_fee" : "Taxa:",
192 + "send_name" : "Nome",
193 + "send_got_it" : "Entendi",
194 + "send_sending" : "Enviando...",
195 + "send_success" : "Seu Monero foi enviado com sucesso",
196
197
198 "settings_title" : "Configurações",
@@ -291,6 +299,7 @@
299 "error_text_minimal_limit" : "A troca por ${provider} não é criada. O valor é menor que o mínimo: ${min} ${currency}",
300 "error_text_maximum_limit" : "A troca por ${provider} não é criada. O valor é superior ao máximo: ${max} ${currency}",
301 "error_text_limits_loading_failed" : "A troca por ${provider} não é criada. Falha no carregamento dos limites",
302 + "error_text_template" : "O nome e o endereço do modelo não podem conter os símbolos ` , ' \" \ne deve ter entre 1 e 106 caracteres",
303
304
305 "auth_store_ban_timeout" : "ban_timeout",
res/values/strings_ru.arb
+9
@@ -185,6 +185,14 @@
185 "send_estimated_fee" : "Предполагаемая комиссия:",
186 "send_priority" : "Комиссия установлена в зависимости от приоритета: ${transactionPriority}.\nПриоритет транзакции может быть изменён в настройках",
187 "send_creating_transaction" : "Создать транзакцию",
188 + "send_templates" : "Шаблоны",
189 + "send_new" : "Новый",
190 + "send_amount" : "Сумма:",
191 + "send_fee" : "Комиссия:",
192 + "send_name" : "Имя",
193 + "send_got_it" : "Понял",
194 + "send_sending" : "Отправка...",
195 + "send_success" : "Ваш Monero был успешно отправлен",
196
197
198 "settings_title" : "Настройки",
@@ -291,6 +299,7 @@
299 "error_text_minimal_limit" : "Сделка для ${provider} не создана. Сумма меньше минимальной: ${min} ${currency}",
300 "error_text_maximum_limit" : "Сделка для ${provider} не создана. Сумма больше максимальной: ${max} ${currency}",
301 "error_text_limits_loading_failed" : "Сделка для ${provider} не создана. Ошибка загрузки лимитов",
302 + "error_text_template" : "Имя и адрес шаблона не может содержать ` , ' \" символы\nи должно быть от 1 до 106 символов в длину",
303
304
305 "auth_store_ban_timeout" : "ban_timeout",
res/values/strings_uk.arb
+10 -1
@@ -185,6 +185,14 @@
185 "send_estimated_fee" : "Ймовірна комісія:",
186 "send_priority" : "Комісія встановлена в залежності від пріоритету: ${transactionPriority}.\nПріоритет транзакції може бути змінений в налаштуваннях",
187 "send_creating_transaction" : "Створити транзакцію",
188 + "send_templates" : "Шаблони",
189 + "send_new" : "Новий",
190 + "send_amount" : "Сума:",
191 + "send_fee" : "Комісія:",
192 + "send_name" : "Ім'я",
193 + "send_got_it" : "Зрозумів",
194 + "send_sending" : "Відправлення...",
195 + "send_success" : "Ваш Monero успішно надісланий",
196
197
198 "settings_title" : "Налаштування",
@@ -283,7 +291,7 @@
291 "error_text_payment_id" : "Ідентифікатор платежу може містити від 16 до 64 символів в hex",
292 "error_text_xmr" : "Значення XMR не може перевищувати доступний баланс.\nКількість цифр після коми повинно бути меншим або дорівнювати 12",
293 "error_text_fiat" : "Значення суми не може перевищувати доступний баланс.\nКількість цифр після коми повинно бути меншим або дорівнювати 2",
286 - "error_text_subaddress_name" : "Ім'я субадреси не може містити ` , ' \" символи\nі може бути від 1 до 32 символів в довжину",
294 + "error_text_subaddress_name" : "Ім'я субадреси не може містити ` , ' \" символи\nі може бути від 1 до 20 символів в довжину",
295 "error_text_amount" : "Баланс може містити тільки цифри",
296 "error_text_wallet_name" : "Ім'я гаманця може містити тільки букви, цифри\nі повинно бути від 1 до 15 символів в довжину",
297 "error_text_keys" : "Ключі гаманця можуть містити тільки 64 символів в hex",
@@ -291,6 +299,7 @@
299 "error_text_minimal_limit" : "Операція для ${provider} не створена. Сума менша мінімальної: ${min} ${currency}",
300 "error_text_maximum_limit" : "Операція для ${provider} не створена. Сума більше максимальної: ${max} ${currency}",
301 "error_text_limits_loading_failed" : "Операція для ${provider} не створена. Помилка завантаження лімітів",
302 + "error_text_template" : "Ім'я та адреса шаблону не може містити ` , ' \" символи\nі може бути від 1 до 106 символів в довжину",
303
304
305 "auth_store_ban_timeout" : "ban_timeout",
res/values/strings_zh.arb
+9
@@ -185,6 +185,14 @@
185 "send_estimated_fee" : "预估费用:",
186 "send_priority" : "目前,费用设置为 ${transactionPriority} 优先.\n交易优先级可以在设置中进行调整",
187 "send_creating_transaction" : "创建交易",
188 + "send_templates" : "範本",
189 + "send_new" : "新",
190 + "send_amount" : "量:",
191 + "send_fee" : "費用:",
192 + "send_name" : "名稱",
193 + "send_got_it" : "得到它了",
194 + "send_sending" : "正在發送...",
195 + "send_success" : "你Monero已成功發送",
196
197
198 "settings_title" : "设定值",
@@ -291,6 +299,7 @@
299 "error_text_minimal_limit" : "未創建 ${provider} 交易。 金額少於最小值:${min} ${currency}",
300 "error_text_maximum_limit" : "未創建 ${provider} 交易。 金額大於最大值:${max} ${currency}",
301 "error_text_limits_loading_failed" : "未創建 ${provider} 交易。 限制加載失敗",
302 + "error_text_template" : "模板名稱和地址不能包含`,' \" 符号\n并且必须在1到106个字符之间",
303
304
305 "auth_store_ban_timeout" : "禁止超时",