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" : "请复制或写下交易编号以继续.",