Cw 588 show popup for adding to address book (#1326)
* popup for adding to address book * update localization files
Serhii committed
Mar 20, 2024 at 00:44 UTC
a0c0ede0998124bf68b89ab95366f63613ea37d0
29 files changed
+103
-18
lib/src/screens/send/send_page.dart
+44
-14
@@ -1,4 +1,5 @@
1
import 'package:cake_wallet/core/auth_service.dart';
2
+import 'package:cake_wallet/entities/contact_record.dart';
3
import 'package:cake_wallet/entities/fiat_currency.dart';
4
import 'package:cake_wallet/entities/template.dart';
5
import 'package:cake_wallet/reactions/wallet_connect.dart';
@@ -48,6 +49,7 @@ class SendPage extends BasePage {
49
final PaymentRequest? initialPaymentRequest;
50
51
bool _effectsInstalled = false;
52
+ ContactRecord? newContactAddress;
53
54
@override
55
String get title => S.current.send;
@@ -443,22 +445,50 @@ class SendPage extends BasePage {
445
}
446
447
if (state is TransactionCommitted) {
446
- String alertContent;
447
- if (sendViewModel.walletType == WalletType.solana) {
448
- alertContent =
449
- '${S.of(_dialogContext).send_success(sendViewModel.selectedCryptoCurrency.toString())}. ${S.of(_dialogContext).waitFewSecondForTxUpdate}';
448
+ newContactAddress =
449
+ newContactAddress ?? sendViewModel.newContactAddress();
450
+
451
+ final successMessage = S.of(_dialogContext).send_success(
452
+ sendViewModel.selectedCryptoCurrency.toString());
453
+
454
+ final waitMessage = sendViewModel.walletType == WalletType.solana
455
+ ? '. ${S.of(_dialogContext).waitFewSecondForTxUpdate}' : '';
456
+
457
+ final newContactMessage = newContactAddress != null
458
+ ? '\n${S.of(context).add_contact_to_address_book}' : '';
459
+
460
+ final alertContent =
461
+ "$successMessage$waitMessage$newContactMessage";
462
+
463
+ if (newContactAddress != null) {
464
+ return AlertWithTwoActions(
465
+ alertTitle: '',
466
+ alertContent: alertContent,
467
+ rightButtonText: S.of(_dialogContext).add_contact,
468
+ leftButtonText: S.of(_dialogContext).ignor,
469
+ actionRightButton: () {
470
+ Navigator.of(_dialogContext).pop();
471
+ RequestReviewHandler.requestReview();
472
+ Navigator.of(context).pushNamed(
473
+ Routes.addressBookAddContact,
474
+ arguments: newContactAddress);
475
+ newContactAddress = null;
476
+ },
477
+ actionLeftButton: () {
478
+ Navigator.of(_dialogContext).pop();
479
+ RequestReviewHandler.requestReview();
480
+ newContactAddress = null;
481
+ });
482
} else {
451
- alertContent = S.of(_dialogContext).send_success(
452
- sendViewModel.selectedCryptoCurrency.toString());
483
+ return AlertWithOneAction(
484
+ alertTitle: '',
485
+ alertContent: alertContent,
486
+ buttonText: S.of(_dialogContext).ok,
487
+ buttonAction: () {
488
+ Navigator.of(_dialogContext).pop();
489
+ RequestReviewHandler.requestReview();
490
+ });
491
}
454
- return AlertWithOneAction(
455
- alertTitle: '',
456
- alertContent: alertContent,
457
- buttonText: S.of(_dialogContext).ok,
458
- buttonAction: () {
459
- Navigator.of(_dialogContext).pop();
460
- RequestReviewHandler.requestReview();
461
- });
492
}
493
494
return Offstage();
lib/view_model/contact_list/contact_view_model.dart
+2
-2
@@ -48,11 +48,11 @@ abstract class ContactViewModelBase with Store {
48
currency = null;
49
}
50
51
- Future save() async {
51
+ Future<void> save() async {
52
try {
53
state = IsExecutingState();
54
55
- if (_contact != null) {
55
+ if (_contact != null && _contact!.original.isInBox) {
56
_contact?.name = name;
57
_contact?.address = address;
58
_contact?.type = currency!;
lib/view_model/send/send_view_model.dart
+29
@@ -1,3 +1,4 @@
1
+import 'package:cake_wallet/entities/contact.dart';
2
import 'package:cake_wallet/entities/priority_for_wallet_type.dart';
3
import 'package:cake_wallet/entities/transaction_description.dart';
4
import 'package:cake_wallet/ethereum/ethereum.dart';
@@ -420,6 +421,34 @@ abstract class SendViewModelBase extends WalletChangeListenerViewModel with Stor
421
}
422
}
423
424
+ ContactRecord? newContactAddress () {
425
+
426
+ final Set<String> contactAddresses =
427
+ Set.from(contactListViewModel.contacts.map((contact) => contact.address))
428
+ ..addAll(contactListViewModel.walletContacts.map((contact) => contact.address));
429
+
430
+ for (var output in outputs) {
431
+ String address;
432
+ if (output.isParsedAddress) {
433
+ address = output.parsedAddress.addresses.first;
434
+ } else {
435
+ address = output.address;
436
+ }
437
+
438
+ if (address.isNotEmpty && !contactAddresses.contains(address)) {
439
+
440
+ return ContactRecord(
441
+ contactListViewModel.contactSource,
442
+ Contact(
443
+ name: '',
444
+ address: address,
445
+ type: selectedCryptoCurrency,
446
+ ));
447
+ }
448
+ }
449
+ return null;
450
+ }
451
+
452
String translateErrorMessage(
453
String error,
454
WalletType walletType,
res/values/strings_ar.arb
+1
@@ -9,6 +9,7 @@
9
"activeConnectionsPrompt": "ﺎﻨﻫ ﺔﻄﺸﻨﻟﺍ ﺕﻻﺎﺼﺗﻻﺍ ﺮﻬﻈﺘﺳ",
10
"add": "إضافة",
11
"add_contact": "ﻝﺎﺼﺗﺍ ﺔﻬﺟ ﺔﻓﺎﺿﺇ",
12
+ "add_contact_to_address_book": "هل ترغب في إضافة جهة الاتصال هذه إلى دفتر العناوين الخاص بك؟",
13
"add_custom_node": "إضافة عقدة مخصصة جديدة",
14
"add_custom_redemption": "إضافة استرداد مخصص",
15
"add_fund_to_card": "أضف أموالاً مدفوعة مسبقًا إلى البطاقات (حتى ${value})",
res/values/strings_bg.arb
+1
@@ -9,6 +9,7 @@
9
"activeConnectionsPrompt": "Тук ще се появят активни връзки",
10
"add": "Добави",
11
"add_contact": "Добави контакт",
12
+ "add_contact_to_address_book": "Искате ли да добавите този контакт към вашата адресна книга?",
13
"add_custom_node": "Добавяне на нов персонализиран Node",
14
"add_custom_redemption": "Добавете персонализиран Redemption",
15
"add_fund_to_card": "Добавете предплатени средства в картите (до ${value})",
res/values/strings_cs.arb
+1
@@ -9,6 +9,7 @@
9
"activeConnectionsPrompt": "Zde se zobrazí aktivní připojení",
10
"add": "Přidat",
11
"add_contact": "Přidat kontakt",
12
+ "add_contact_to_address_book": "Chcete přidat tento kontakt do svého adresáře?",
13
"add_custom_node": "Přidat vlastní uzel",
14
"add_custom_redemption": "Přidat vlastní uplatnění",
15
"add_fund_to_card": "Všechny předplacené prostředky na kartě (až ${value})",
res/values/strings_de.arb
+2
-1
@@ -9,6 +9,7 @@
9
"activeConnectionsPrompt": "Hier werden aktive Verbindungen angezeigt",
10
"add": "Hinzufügen",
11
"add_contact": "Kontakt hinzufügen",
12
+ "add_contact_to_address_book": "Möchten Sie diesen Kontakt zu Ihrem Adressbuch hinzufügen?",
13
"add_custom_node": "Neuen benutzerdefinierten Knoten hinzufügen",
14
"add_custom_redemption": "Benutzerdefinierte Einlösung hinzufügen",
15
"add_fund_to_card": "Prepaid-Guthaben zu den Karten hinzufügen (bis zu ${value})",
@@ -410,8 +411,8 @@
411
"placeholder_transactions": "Ihre Transaktionen werden hier angezeigt",
412
"please_fill_totp": "Bitte geben Sie den 8-stelligen Code ein, der auf Ihrem anderen Gerät vorhanden ist",
413
"please_make_selection": "Bitte treffen Sie unten eine Auswahl zum Erstellen oder Wiederherstellen Ihrer Wallet.",
413
- "please_reference_document": "Bitte verweisen Sie auf die folgenden Dokumente, um weitere Informationen zu erhalten.",
414
"Please_reference_document": "Weitere Informationen finden Sie in den Dokumenten unten.",
415
+ "please_reference_document": "Bitte verweisen Sie auf die folgenden Dokumente, um weitere Informationen zu erhalten.",
416
"please_select": "Bitte auswählen:",
417
"please_select_backup_file": "Bitte wählen Sie die Sicherungsdatei und geben Sie das Sicherungskennwort ein.",
418
"please_try_to_connect_to_another_node": "Bitte versuchen Sie, sich mit einem anderen Knoten zu verbinden",
res/values/strings_en.arb
+1
@@ -9,6 +9,7 @@
9
"activeConnectionsPrompt": "Active connections will appear here",
10
"add": "Add",
11
"add_contact": "Add contact",
12
+ "add_contact_to_address_book": "Would you like to add this contact to your address book?",
13
"add_custom_node": "Add New Custom Node",
14
"add_custom_redemption": "Add Custom Redemption",
15
"add_fund_to_card": "Add prepaid funds to the cards (up to ${value})",
res/values/strings_es.arb
+1
@@ -9,6 +9,7 @@
9
"activeConnectionsPrompt": "Las conexiones activas aparecerán aquí",
10
"add": "Añadir",
11
"add_contact": "Agregar contacto",
12
+ "add_contact_to_address_book": "¿Le gustaría agregar este contacto a su libreta de direcciones?",
13
"add_custom_node": "Agregar nuevo nodo personalizado",
14
"add_custom_redemption": "Agregar redención personalizada",
15
"add_fund_to_card": "Agregar fondos prepagos a las tarjetas (hasta ${value})",
res/values/strings_fr.arb
+1
@@ -9,6 +9,7 @@
9
"activeConnectionsPrompt": "Les connexions actives apparaîtront ici",
10
"add": "Ajouter",
11
"add_contact": "Ajouter le contact",
12
+ "add_contact_to_address_book": "Souhaitez-vous ajouter ce contact à votre carnet d'adresses?",
13
"add_custom_node": "Ajouter un nouveau nœud personnalisé",
14
"add_custom_redemption": "Ajouter un remboursement personnalisé",
15
"add_fund_to_card": "Ajouter des fonds prépayés aux cartes (jusqu'à ${value})",
res/values/strings_ha.arb
+1
@@ -9,6 +9,7 @@
9
"activeConnectionsPrompt": "Haɗin kai mai aiki zai bayyana a nan",
10
"add": "Ƙara",
11
"add_contact": "Ƙara lamba",
12
+ "add_contact_to_address_book": "Kuna so ku ƙara wannan lamba zuwa littafin adireshinku?",
13
"add_custom_node": "Ƙara Sabon Kulli na Custom",
14
"add_custom_redemption": "Ƙara Ceto na Musamman",
15
"add_fund_to_card": "Ƙara kuɗin da aka riga aka biya a katunan (har zuwa ${value})",
res/values/strings_hi.arb
+1
@@ -9,6 +9,7 @@
9
"activeConnectionsPrompt": "सक्रिय कनेक्शन यहां दिखाई देंगे",
10
"add": "जोड़ना",
11
"add_contact": "संपर्क जोड़ें",
12
+ "add_contact_to_address_book": "क्या आप इस संपर्क को अपनी एड्रेस बुक में जोड़ना चाहेंगे?",
13
"add_custom_node": "नया कस्टम नोड जोड़ें",
14
"add_custom_redemption": "कस्टम रिडेम्पशन जोड़ें",
15
"add_fund_to_card": "कार्ड में प्रीपेड धनराशि जोड़ें (${value} तक)",
res/values/strings_hr.arb
+1
@@ -9,6 +9,7 @@
9
"activeConnectionsPrompt": "Ovdje će se pojaviti aktivne veze",
10
"add": "Dodaj",
11
"add_contact": "Dodaj kontakt",
12
+ "add_contact_to_address_book": "Želite li dodati ovaj kontakt u svoj adresar?",
13
"add_custom_node": "Dodaj novi prilagođeni čvor",
14
"add_custom_redemption": "Dodaj prilagođeni otkup",
15
"add_fund_to_card": "Dodajte unaprijed uplaćena sredstva na kartice (do ${value})",
res/values/strings_id.arb
+1
@@ -9,6 +9,7 @@
9
"activeConnectionsPrompt": "Koneksi aktif akan muncul di sini",
10
"add": "Menambahkan",
11
"add_contact": "Tambah kontak",
12
+ "add_contact_to_address_book": "Apakah Anda ingin menambahkan kontak ini ke buku alamat Anda?",
13
"add_custom_node": "Tambahkan Node Kustom Baru",
14
"add_custom_redemption": "Tambahkan Tukar Kustom",
15
"add_fund_to_card": "Tambahkan dana pra-bayar ke kartu (hingga ${value})",
res/values/strings_it.arb
+1
@@ -9,6 +9,7 @@
9
"activeConnectionsPrompt": "Le connessioni attive verranno visualizzate qui",
10
"add": "Aggiungi",
11
"add_contact": "Aggiungi contatto",
12
+ "add_contact_to_address_book": "Vorresti aggiungere questo contatto alla tua rubrica?",
13
"add_custom_node": "Aggiungi nuovo nodo personalizzato",
14
"add_custom_redemption": "Aggiungi riscatto personalizzato",
15
"add_fund_to_card": "Aggiungi fondi prepagati alle carte (fino a ${value})",
res/values/strings_ja.arb
+1
@@ -9,6 +9,7 @@
9
"activeConnectionsPrompt": "アクティブな接続がここに表示されます",
10
"add": "加える",
11
"add_contact": "連絡先を追加",
12
+ "add_contact_to_address_book": "この連絡先をアドレス帳に追加しますか?",
13
"add_custom_node": "新しいカスタム ノードを追加",
14
"add_custom_redemption": "カスタム引き換えを追加",
15
"add_fund_to_card": "プリペイド資金をカードに追加します(最大 ${value})",
res/values/strings_ko.arb
+2
-1
@@ -9,6 +9,7 @@
9
"activeConnectionsPrompt": "활성 연결이 여기에 표시됩니다",
10
"add": "더하다",
11
"add_contact": "주소록에 추가",
12
+ "add_contact_to_address_book": "이 연락처를 주소록에 추가 하시겠습니까?",
13
"add_custom_node": "새 사용자 정의 노드 추가",
14
"add_custom_redemption": "사용자 지정 상환 추가",
15
"add_fund_to_card": "카드에 선불 금액 추가(최대 ${value})",
@@ -410,8 +411,8 @@
411
"placeholder_transactions": "거래가 여기에 표시됩니다",
412
"please_fill_totp": "다른 기기에 있는 8자리 코드를 입력하세요.",
413
"please_make_selection": "아래에서 선택하십시오 지갑 만들기 또는 복구.",
413
- "please_reference_document": "자세한 내용은 아래 문서를 참조하십시오.",
414
"Please_reference_document": "자세한 내용은 아래 문서를 참조하십시오.",
415
+ "please_reference_document": "자세한 내용은 아래 문서를 참조하십시오.",
416
"please_select": "선택 해주세요:",
417
"please_select_backup_file": "백업 파일을 선택하고 백업 암호를 입력하십시오.",
418
"please_try_to_connect_to_another_node": "다른 노드에 연결을 시도하십시오",
res/values/strings_my.arb
+1
@@ -9,6 +9,7 @@
9
"activeConnectionsPrompt": "လက်ရှိချိတ်ဆက်မှုများ ဤနေရာတွင် ပေါ်လာပါမည်။",
10
"add": "ထည့်ပါ။",
11
"add_contact": "အဆက်အသွယ်ထည့်ပါ။",
12
+ "add_contact_to_address_book": "ဒီအဆက်အသွယ်ကိုမင်းရဲ့လိပ်စာစာအုပ်နဲ့ထပ်ထည့်ချင်ပါသလား။",
13
"add_custom_node": "စိတ်ကြိုက် Node အသစ်ကို ထည့်ပါ။",
14
"add_custom_redemption": "စိတ်ကြိုက်ရွေးယူမှုကို ထည့်ပါ။",
15
"add_fund_to_card": "ကတ်များသို့ ကြိုတင်ငွေပေးငွေများ ထည့်ပါ (${value} အထိ)",
res/values/strings_nl.arb
+1
@@ -9,6 +9,7 @@
9
"activeConnectionsPrompt": "Actieve verbindingen worden hier weergegeven",
10
"add": "Toevoegen",
11
"add_contact": "Contactpersoon toevoegen",
12
+ "add_contact_to_address_book": "Wilt u dit contact toevoegen aan uw adresboek?",
13
"add_custom_node": "Voeg een nieuw aangepast knooppunt toe",
14
"add_custom_redemption": "Voeg aangepaste inwisseling toe",
15
"add_fund_to_card": "Voeg prepaid tegoed toe aan de kaarten (tot ${value})",
res/values/strings_pl.arb
+1
@@ -9,6 +9,7 @@
9
"activeConnectionsPrompt": "Tutaj pojawią się aktywne połączenia",
10
"add": "Dodaj",
11
"add_contact": "Dodaj kontakt",
12
+ "add_contact_to_address_book": "Czy chciałbyś dodać ten kontakt do swojej książki adresowej?",
13
"add_custom_node": "Dodaj nowy węzeł niestandardowy",
14
"add_custom_redemption": "Dodaj niestandardowe wykorzystanie",
15
"add_fund_to_card": "Dodaj przedpłacone środki do kart (do ${value})",
res/values/strings_pt.arb
+1
@@ -9,6 +9,7 @@
9
"activeConnectionsPrompt": "Conexões ativas aparecerão aqui",
10
"add": "Adicionar",
11
"add_contact": "Adicionar contato",
12
+ "add_contact_to_address_book": "Você gostaria de adicionar esse contato ao seu catálogo de endereços?",
13
"add_custom_node": "Adicionar novo nó personalizado",
14
"add_custom_redemption": "Adicionar resgate personalizado",
15
"add_fund_to_card": "Adicionar fundos pré-pagos aos cartões (até ${value})",
res/values/strings_ru.arb
+1
@@ -9,6 +9,7 @@
9
"activeConnectionsPrompt": "Здесь появятся активные подключения",
10
"add": "Добавить",
11
"add_contact": "Добавить контакт",
12
+ "add_contact_to_address_book": "Хотели бы вы добавить этот контакт в свою адресную книгу?",
13
"add_custom_node": "Добавить новый пользовательский узел",
14
"add_custom_redemption": "Добавить пользовательское погашение",
15
"add_fund_to_card": "Добавить предоплаченные средства на карты (до ${value})",
res/values/strings_th.arb
+1
@@ -9,6 +9,7 @@
9
"activeConnectionsPrompt": "การเชื่อมต่อที่ใช้งานอยู่จะปรากฏที่นี่",
10
"add": "เพิ่ม",
11
"add_contact": "เพิ่มผู้ติดต่อ",
12
+ "add_contact_to_address_book": "คุณต้องการเพิ่มผู้ติดต่อนี้ในสมุดที่อยู่ของคุณหรือไม่?",
13
"add_custom_node": "เพิ่มจุดโหนดแบบกำหนดเอง",
14
"add_custom_redemption": "เพิ่มการรับคืนที่กำหนดเอง",
15
"add_fund_to_card": "เพิ่มเงินสำรองไว้บนบัตร (ถึง ${value})",
res/values/strings_tl.arb
+1
@@ -9,6 +9,7 @@
9
"activeConnectionsPrompt": "Lalabas dito ang mga aktibong koneksyon",
10
"add": "Idagdag",
11
"add_contact": "Magdagdag ng contact",
12
+ "add_contact_to_address_book": "Nais mo bang idagdag ang contact na ito sa iyong address book?",
13
"add_custom_node": "Magdagdag ng bagong pasadyang node",
14
"add_custom_redemption": "Magdagdag ng pasadyang pagtubos",
15
"add_fund_to_card": "Magdagdag ng prepaid na pondo sa mga kard (hanggang sa ${value})",
res/values/strings_tr.arb
+1
@@ -9,6 +9,7 @@
9
"activeConnectionsPrompt": "Aktif bağlantılar burada görünecek",
10
"add": "Ekle",
11
"add_contact": "Kişi ekle",
12
+ "add_contact_to_address_book": "Bu kişiyi adres defterinize eklemek ister misiniz?",
13
"add_custom_node": "Yeni Özel Düğüm Ekleme",
14
"add_custom_redemption": "Özel Bozdurma Ekle",
15
"add_fund_to_card": "Ön ödemeli kartlara para ekle (En fazla yüklenebilir tutar: ${value})",
res/values/strings_uk.arb
+1
@@ -9,6 +9,7 @@
9
"activeConnectionsPrompt": "Тут з’являться активні підключення",
10
"add": "Добавити",
11
"add_contact": "Додати контакт",
12
+ "add_contact_to_address_book": "Хотіли б ви додати цей контакт до своєї адресної книги?",
13
"add_custom_node": "Додати новий спеціальний вузол",
14
"add_custom_redemption": "Додати спеціальне погашення",
15
"add_fund_to_card": "Додайте передплачені кошти на картки (до ${value})",
res/values/strings_ur.arb
+1
@@ -9,6 +9,7 @@
9
"activeConnectionsPrompt": "۔ﮯﮔ ﮞﻮﮨ ﺮﮨﺎﻇ ﮞﺎﮩﯾ ﺰﻨﺸﮑﻨﮐ ﻝﺎﻌﻓ",
10
"add": "شامل کریں۔",
11
"add_contact": "۔ﮟﯾﺮﮐ ﻞﻣﺎﺷ ﮧﻄﺑﺍﺭ",
12
+ "add_contact_to_address_book": "کیا آپ اس رابطہ کو اپنی ایڈریس بک میں شامل کرنا چاہیں گے؟",
13
"add_custom_node": "نیا کسٹم نوڈ شامل کریں۔",
14
"add_custom_redemption": "حسب ضرورت چھٹکارا شامل کریں۔",
15
"add_fund_to_card": "کارڈز میں پری پیڈ فنڈز شامل کریں (${value} تک)",
res/values/strings_yo.arb
+1
@@ -9,6 +9,7 @@
9
"activeConnectionsPrompt": "Awọn asopọ ti nṣiṣe lọwọ yoo han nibi",
10
"add": "Fikún",
11
"add_contact": "Fi olubasọrọ kun",
12
+ "add_contact_to_address_book": "Ṣe o fẹ lati ṣafikun olubasọrọ yii si iwe adirẹsi rẹ?",
13
"add_custom_node": "Fikún apẹka títun t'ẹ́ pààrọ̀",
14
"add_custom_redemption": "Tẹ̀ iye owó t'ẹ́ fẹ́ ná",
15
"add_fund_to_card": "Ẹ fikún owó sí àwọn káàdì (kò tóbi ju ${value})",
res/values/strings_zh.arb
+1
@@ -9,6 +9,7 @@
9
"activeConnectionsPrompt": "活动连接将出现在这里",
10
"add": "添加",
11
"add_contact": "增加联系人",
12
+ "add_contact_to_address_book": "您想将此联系人添加到您的通讯录中吗?",
13
"add_custom_node": "添加新的自定义节点",
14
"add_custom_redemption": "添加自定义兑换",
15
"add_fund_to_card": "向卡中添加预付资金(最多 ${value})",