cw-60: fill amount on scan qr on exchange page (#309)

* cw-60: fill amount on scan qr on exchange page

clear committed Mar 31, 2022 at 19:54 UTC 5890df86db3c7c94fb0d01d5546ea9699c87c22a
20 files changed +92 -42
lib/src/screens/exchange/widgets/exchange_card.dart
+33 -1
@@ -1,7 +1,9 @@
1 import 'package:cake_wallet/entities/contact_base.dart';
2 import 'package:cake_wallet/routes.dart';
3 +import 'package:cake_wallet/src/widgets/alert_with_two_actions.dart';
4 import 'package:cake_wallet/utils/show_bar.dart';
5 import 'package:cake_wallet/utils/show_pop_up.dart';
6 +import 'package:cake_wallet/utils/payment_request.dart';
7 import 'package:flutter/services.dart';
8 import 'package:flutter/material.dart';
9 import 'package:cake_wallet/generated/i18n.dart';
@@ -308,6 +310,16 @@ class ExchangeCardState extends State<ExchangeCard> {
310 child: AddressTextField(
311 focusNode: widget.addressFocusNode,
312 controller: addressController,
313 + onURIScanned: (uri) {
314 + final paymentRequest = PaymentRequest.fromUri(uri);
315 + addressController.text = paymentRequest.address;
316 +
317 + if (amountController.text.isNotEmpty) {
318 + _showAmountPopup(context, paymentRequest);
319 + } else {
320 + amountController.text = paymentRequest.amount;
321 + }
322 + },
323 placeholder: widget.hasRefundAddress
324 ? S.of(context).refund_address
325 : null,
@@ -331,7 +343,9 @@ class ExchangeCardState extends State<ExchangeCard> {
343 buttonColor: widget.addressButtonsColor,
344 validator: widget.addressTextFieldValidator,
345 onPushPasteButton: widget.onPushPasteButton,
334 - onPushAddressBookButton: widget.onPushAddressBookButton),
346 + onPushAddressBookButton: widget.onPushAddressBookButton
347 + ),
348 +
349 )
350 : Padding(
351 padding: EdgeInsets.only(top: 10),
@@ -440,4 +454,22 @@ class ExchangeCardState extends State<ExchangeCard> {
454 : null),
455 context: context);
456 }
457 +
458 + void _showAmountPopup(BuildContext context, PaymentRequest paymentRequest) {
459 + showPopUp<void>(
460 + context: context,
461 + builder: (dialogContext) {
462 + return AlertWithTwoActions(
463 + alertTitle: S.of(context).overwrite_amount,
464 + alertContent: S.of(context).qr_payment_amount,
465 + rightButtonText: S.of(context).ok,
466 + leftButtonText: S.of(context).cancel,
467 + actionRightButton: () {
468 + amountController.text = paymentRequest.amount;
469 + Navigator.of(context).pop();
470 + },
471 + actionLeftButton: () => Navigator.of(dialogContext).pop());
472 + }
473 + );
474 + }
475 }
lib/src/screens/send/send_template_page.dart
+4 -13
@@ -1,3 +1,4 @@
1 +import 'package:cake_wallet/utils/payment_request.dart';
2 import 'package:mobx/mobx.dart';
3 import 'package:flutter/cupertino.dart';
4 import 'package:flutter/material.dart';
@@ -109,19 +110,9 @@ class SendTemplatePage extends BasePage {
110 child: AddressTextField(
111 controller: _addressController,
112 onURIScanned: (uri) {
112 - var address = '';
113 - var amount = '';
114 -
115 - if (uri != null) {
116 - address = uri.path;
117 - amount = uri.queryParameters['tx_amount'] ??
118 - uri.queryParameters['amount'];
119 - } else {
120 - address = uri.toString();
121 - }
122 -
123 - _addressController.text = address;
124 - _cryptoAmountController.text = amount;
113 + final paymentRequest = PaymentRequest.fromUri(uri);
114 + _addressController.text = paymentRequest.address;
115 + _cryptoAmountController.text = paymentRequest.amount;
116 },
117 options: [
118 AddressTextFieldOption.paste,
lib/src/screens/send/widgets/send_card.dart
+4 -13
@@ -1,4 +1,5 @@
1 import 'dart:ui';
2 +import 'package:cake_wallet/utils/payment_request.dart';
3 import 'package:cw_core/transaction_priority.dart';
4 import 'package:cake_wallet/routes.dart';
5 import 'package:cake_wallet/src/widgets/keyboard_done_button.dart';
@@ -114,19 +115,9 @@ class SendCardState extends State<SendCard>
115 focusNode: addressFocusNode,
116 controller: addressController,
117 onURIScanned: (uri) {
117 - var address = '';
118 - var amount = '';
119 -
120 - if (uri != null) {
121 - address = uri.path;
122 - amount = uri.queryParameters['tx_amount'] ??
123 - uri.queryParameters['amount'];
124 - } else {
125 - address = uri.toString();
126 - }
127 -
128 - addressController.text = address;
129 - cryptoAmountController.text = amount;
118 + final paymentRequest = PaymentRequest.fromUri(uri);
119 + addressController.text = paymentRequest.address;
120 + cryptoAmountController.text = paymentRequest.amount;
121 },
122 options: [
123 AddressTextFieldOption.paste,
lib/src/widgets/address_text_field.dart
+3
@@ -193,6 +193,9 @@ class AddressTextField extends StatelessWidget {
193 Future<void> _presentQRScanner(BuildContext context) async {
194 try {
195 final code = await presentQRScanner();
196 + if (code.isEmpty) {
197 + return;
198 + }
199 final uri = Uri.parse(code);
200 var address = '';
201
lib/utils/payment_request.dart new
+18
@@ -0,0 +1,18 @@
1 +class PaymentRequest {
2 + PaymentRequest(this.address, this.amount);
3 +
4 + factory PaymentRequest.fromUri(Uri uri) {
5 + var address = "";
6 + var amount = "";
7 +
8 + if (uri != null) {
9 + address = uri.path;
10 + amount = uri.queryParameters['tx_amount'] ?? uri.queryParameters['amount'] ?? "";
11 + }
12 +
13 + return PaymentRequest(address, amount);
14 + }
15 +
16 + final String address;
17 + final String amount;
18 +}
\ No newline at end of file
res/values/strings_de.arb
+2 -1
@@ -78,7 +78,8 @@
78 "min_value" : "Min: ${value} ${currency}",
79 "max_value" : "Max: ${value} ${currency}",
80 "change_currency" : "Währung ändern",
81 -
81 + "overwrite_amount" : "Overwrite amount",
82 + "qr_payment_amount" : "This QR code contains a payment amount. Do you want to overwrite the current value?",
83
84 "copy_id" : "ID kopieren",
85 "exchange_result_write_down_trade_id" : "Bitte kopieren oder notieren Sie die Handels-ID, um fortzufahren.",
res/values/strings_en.arb
+2 -1
@@ -78,7 +78,8 @@
78 "min_value" : "Min: ${value} ${currency}",
79 "max_value" : "Max: ${value} ${currency}",
80 "change_currency" : "Change Currency",
81 -
81 + "overwrite_amount" : "Overwrite amount",
82 + "qr_payment_amount" : "This QR code contains a payment amount. Do you want to overwrite the current value?",
83
84 "copy_id" : "Copy ID",
85 "exchange_result_write_down_trade_id" : "Please copy or write down the trade ID to continue.",
res/values/strings_es.arb
+2 -1
@@ -78,7 +78,8 @@
78 "min_value" : "Min: ${value} ${currency}",
79 "max_value" : "Max: ${value} ${currency}",
80 "change_currency" : "Cambiar moneda",
81 -
81 + "overwrite_amount" : "Overwrite amount",
82 + "qr_payment_amount" : "This QR code contains a payment amount. Do you want to overwrite the current value?",
83
84 "copy_id" : "Copiar ID",
85 "exchange_result_write_down_trade_id" : "Por favor, copia o escribe el ID.",
res/values/strings_fr.arb
+2 -1
@@ -76,7 +76,8 @@
76 "min_value" : "Min: ${value} ${currency}",
77 "max_value" : "Max: ${value} ${currency}",
78 "change_currency" : "Changer de Devise",
79 -
79 + "overwrite_amount" : "Overwrite amount",
80 + "qr_payment_amount" : "This QR code contains a payment amount. Do you want to overwrite the current value?",
81
82 "copy_id" : "Copier l'ID",
83 "exchange_result_write_down_trade_id" : "Merci de copier ou d'écrire l'ID d'échange pour continuer.",
res/values/strings_hi.arb
+2 -1
@@ -78,7 +78,8 @@
78 "min_value" : "मिन: ${value} ${currency}",
79 "max_value" : "मैक्स: ${value} ${currency}",
80 "change_currency" : "मुद्रा परिवर्तन करें",
81 -
81 + "overwrite_amount" : "Overwrite amount",
82 + "qr_payment_amount" : "This QR code contains a payment amount. Do you want to overwrite the current value?",
83
84 "copy_id" : "प्रतिलिपि ID",
85 "exchange_result_write_down_trade_id" : "जारी रखने के लिए कृपया ट्रेड ID की प्रतिलिपि बनाएँ या लिखें.",
res/values/strings_hr.arb
+2 -1
@@ -78,7 +78,8 @@
78 "min_value" : "Min.: ${value} ${currency}",
79 "max_value" : "Maks.: ${value} ${currency}",
80 "change_currency" : "Promijenite valutu",
81 -
81 + "overwrite_amount" : "Overwrite amount",
82 + "qr_payment_amount" : "This QR code contains a payment amount. Do you want to overwrite the current value?",
83
84 "copy_id" : "Kopirati ID",
85 "exchange_result_write_down_trade_id" : "Molimo kopirajte ili zapišite transakcijski ID za nastavak.",
res/values/strings_it.arb
+2 -1
@@ -78,7 +78,8 @@
78 "min_value" : "Min: ${value} ${currency}",
79 "max_value" : "Max: ${value} ${currency}",
80 "change_currency" : "Cambia Moneta",
81 -
81 + "overwrite_amount" : "Overwrite amount",
82 + "qr_payment_amount" : "This QR code contains a payment amount. Do you want to overwrite the current value?",
83
84 "copy_id" : "Copia ID",
85 "exchange_result_write_down_trade_id" : "Gentilmente fai una copia o trascrivi l'ID dello scambio per continuare.",
res/values/strings_ja.arb
+2 -1
@@ -78,7 +78,8 @@
78 "min_value" : "分: ${value} ${currency}",
79 "max_value" : "マックス: ${value} ${currency}",
80 "change_currency" : "通貨を変更する",
81 -
81 + "overwrite_amount" : "Overwrite amount",
82 + "qr_payment_amount" : "This QR code contains a payment amount. Do you want to overwrite the current value?",
83
84 "copy_id" : "IDをコピー",
85 "exchange_result_write_down_trade_id" : "続行するには、取引IDをコピーまたは書き留めてください.",
res/values/strings_ko.arb
+2 -1
@@ -78,7 +78,8 @@
78 "min_value" : "최소: ${value} ${currency}",
79 "max_value" : "맥스: ${value} ${currency}",
80 "change_currency" : "통화 변경",
81 -
81 + "overwrite_amount" : "Overwrite amount",
82 + "qr_payment_amount" : "This QR code contains a payment amount. Do you want to overwrite the current value?",
83
84 "copy_id" : "부 ID",
85 "exchange_result_write_down_trade_id" : "계속하려면 거래 ID를 복사하거나 적어 두십시오..",
res/values/strings_nl.arb
+2 -1
@@ -78,7 +78,8 @@
78 "min_value" : "Min: ${value} ${currency}",
79 "max_value" : "Max: ${value} ${currency}",
80 "change_currency" : "Verander valuta",
81 -
81 + "overwrite_amount" : "Overwrite amount",
82 + "qr_payment_amount" : "This QR code contains a payment amount. Do you want to overwrite the current value?",
83
84 "copy_id" : "ID kopiëren",
85 "exchange_result_write_down_trade_id" : "Kopieer of noteer de handels-ID om door te gaan.",
res/values/strings_pl.arb
+2 -1
@@ -81,7 +81,8 @@
81 "min_value" : "Min: ${value} ${currency}",
82 "max_value" : "Max: ${value} ${currency}",
83 "change_currency" : "Change Currency",
84 -
84 + "overwrite_amount" : "Overwrite amount",
85 + "qr_payment_amount" : "This QR code contains a payment amount. Do you want to overwrite the current value?",
86
87 "copy_id" : "ID kopii",
88 "exchange_result_write_down_trade_id" : "Skopiuj lub zanotuj identyfikator transakcji, aby kontynuować.",
res/values/strings_pt.arb
+2 -1
@@ -78,7 +78,8 @@
78 "min_value" : "Mín: ${value} ${currency}",
79 "max_value" : "Máx: ${value} ${currency}",
80 "change_currency" : "Alterar moeda",
81 -
81 + "overwrite_amount" : "Overwrite amount",
82 + "qr_payment_amount" : "This QR code contains a payment amount. Do you want to overwrite the current value?",
83
84 "copy_id" : "Copiar ID",
85 "exchange_result_write_down_trade_id" : "Copie ou anote o ID da troca para continuar.",
res/values/strings_ru.arb
+2 -1
@@ -78,7 +78,8 @@
78 "min_value" : "Мин: ${value} ${currency}",
79 "max_value" : "Макс: ${value} ${currency}",
80 "change_currency" : "Изменить валюту",
81 -
81 + "overwrite_amount" : "Overwrite amount",
82 + "qr_payment_amount" : "This QR code contains a payment amount. Do you want to overwrite the current value?",
83
84 "copy_id" : "Скопировать ID",
85 "exchange_result_write_down_trade_id" : "Пожалуйста, скопируйте или запишите ID сделки.",
res/values/strings_uk.arb
+2 -1
@@ -78,7 +78,8 @@
78 "min_value" : "Мін: ${value} ${currency}",
79 "max_value" : "Макс: ${value} ${currency}",
80 "change_currency" : "Змінити валюту",
81 -
81 + "overwrite_amount" : "Overwrite amount",
82 + "qr_payment_amount" : "This QR code contains a payment amount. Do you want to overwrite the current value?",
83
84 "copy_id" : "Скопіювати ID",
85 "exchange_result_write_down_trade_id" : "Будь ласка, скопіюйте або запишіть ID операції.",
res/values/strings_zh.arb
+2 -1
@@ -78,7 +78,8 @@
78 "min_value" : "最低: ${value} ${currency}",
79 "max_value" : "最高: ${value} ${currency}",
80 "change_currency" : "更改币种",
81 -
81 + "overwrite_amount" : "Overwrite amount",
82 + "qr_payment_amount" : "This QR code contains a payment amount. Do you want to overwrite the current value?",
83
84 "copy_id" : "复制ID",
85 "exchange_result_write_down_trade_id" : "请复制或写下交易编号以继续.",