Send data from URI to send screen

OmarHatem28 committed Aug 9, 2022 at 15:47 UTC 7bccf468323fe40f8cde19a86d436669f68c81d1
5 files changed +64 -28
lib/di.dart
+7 -3
@@ -5,6 +5,7 @@ import 'package:cake_wallet/ionia/ionia_anypay.dart';
5 import 'package:cake_wallet/ionia/ionia_category.dart';
6 import 'package:cake_wallet/ionia/ionia_gift_card.dart';
7 import 'package:cake_wallet/src/screens/ionia/cards/ionia_gift_card_detail_page.dart';
8 +import 'package:cake_wallet/utils/payment_request.dart';
9 import 'package:cake_wallet/view_model/ionia/ionia_auth_view_model.dart';
10 import 'package:cake_wallet/view_model/ionia/ionia_buy_card_view_model.dart';
11 import 'package:cake_wallet/view_model/ionia/ionia_filter_view_model.dart';
@@ -372,9 +373,12 @@ Future setup(
373 getIt.get<BalanceViewModel>(),
374 _transactionDescriptionBox));
375
375 - getIt.registerFactory(
376 - () => SendPage(sendViewModel: getIt.get<SendViewModel>(),
377 - settingsViewModel: getIt.get<SettingsViewModel>()));
376 + getIt.registerFactoryParam<SendPage, PaymentRequest, void>(
377 + (PaymentRequest initialPaymentRequest, _) => SendPage(
378 + sendViewModel: getIt.get<SendViewModel>(),
379 + settingsViewModel: getIt.get<SettingsViewModel>(),
380 + initialPaymentRequest: initialPaymentRequest,
381 + ));
382
383 getIt.registerFactory(() => SendTemplatePage(
384 sendTemplateViewModel: getIt.get<SendTemplateViewModel>()));
lib/main.dart
+13 -14
@@ -5,6 +5,7 @@ import 'package:cake_wallet/buy/order.dart';
5 import 'package:cake_wallet/ionia/ionia_category.dart';
6 import 'package:cake_wallet/ionia/ionia_merchant.dart';
7 import 'package:cake_wallet/store/yat/yat_store.dart';
8 +import 'package:cake_wallet/utils/payment_request.dart';
9 import 'package:flutter/foundation.dart';
10 import 'package:flutter/material.dart';
11 import 'package:flutter/services.dart';
@@ -216,34 +217,32 @@ class AppState extends State<App> with SingleTickerProviderStateMixin {
217 /// the foreground or in the background.
218 Future<void> initUniLinks() async {
219 try {
219 - stream = getLinksStream().listen((String link) {
220 - handleDeepLinking(link);
220 + stream = getUriLinksStream().listen((Uri uri) {
221 + handleDeepLinking(uri);
222 });
223
223 - final String initialLink = await getInitialLink();
224 + final Uri initialUri = await getInitialUri();
225
225 - handleDeepLinking(initialLink);
226 + handleDeepLinking(initialUri);
227 } catch (e) {
228 print(e);
229 }
230 }
231
231 - void handleDeepLinking(String link) async {
232 - if (link == null || !mounted) return;
233 -
234 - final List<String> urlComponents = link.split(":");
232 + void handleDeepLinking(Uri uri) {
233 + if (uri == null || !mounted) return;
234
236 - switch (urlComponents.first) {
235 + switch (uri.scheme) {
236 case "bitcoin":
238 - print("@@@@@@@@@@@@@@@@@@@@@@@@@@");
239 - print("Bitcoin QR Code: \n${link}");
240 - break;
237 case "litecoin":
238 case "haven":
239 case "monero":
240 default:
245 - print("@@@@@@@@@@@@@@@@@@@@@@@@@@");
246 - print(link);
241 + Navigator.pushNamed(
242 + navigatorKey.currentContext,
243 + Routes.send,
244 + arguments: PaymentRequest.fromUri(uri),
245 + );
246 }
247 }
248
lib/router.dart
+6 -1
@@ -16,6 +16,7 @@ import 'package:cake_wallet/src/screens/seed/pre_seed_page.dart';
16 import 'package:cake_wallet/src/screens/support/support_page.dart';
17 import 'package:cake_wallet/src/screens/unspent_coins/unspent_coins_details_page.dart';
18 import 'package:cake_wallet/src/screens/unspent_coins/unspent_coins_list_page.dart';
19 +import 'package:cake_wallet/utils/payment_request.dart';
20 import 'package:cake_wallet/view_model/monero_account_list/account_list_item.dart';
21 import 'package:flutter/cupertino.dart';
22 import 'package:flutter/material.dart';
@@ -207,8 +208,12 @@ Route<dynamic> createRoute(RouteSettings settings) {
208 builder: (_) => getIt.get<DashboardPage>());
209
210 case Routes.send:
211 + final initialPaymentRequest = settings.arguments as PaymentRequest;
212 +
213 return CupertinoPageRoute<void>(
211 - fullscreenDialog: true, builder: (_) => getIt.get<SendPage>());
214 + fullscreenDialog: true, builder: (_) => getIt.get<SendPage>(
215 + param1: initialPaymentRequest,
216 + ));
217
218 case Routes.sendTemplate:
219 return CupertinoPageRoute<void>(
lib/src/screens/send/send_page.dart
+9 -2
@@ -5,6 +5,7 @@ import 'package:cake_wallet/src/screens/send/widgets/send_card.dart';
5 import 'package:cake_wallet/src/widgets/alert_with_two_actions.dart';
6 import 'package:cake_wallet/src/widgets/picker.dart';
7 import 'package:cake_wallet/src/widgets/template_tile.dart';
8 +import 'package:cake_wallet/utils/payment_request.dart';
9 import 'package:cake_wallet/view_model/send/output.dart';
10 import 'package:cake_wallet/view_model/settings/settings_view_model.dart';
11 import 'package:flutter/cupertino.dart';
@@ -28,13 +29,18 @@ import 'package:smooth_page_indicator/smooth_page_indicator.dart';
29 import 'package:cw_core/crypto_currency.dart';
30
31 class SendPage extends BasePage {
31 - SendPage({@required this.sendViewModel,@required this.settingsViewModel }) : _formKey = GlobalKey<FormState>(),fiatFromSettings = settingsViewModel.fiatCurrency;
32 + SendPage({
33 + @required this.sendViewModel,
34 + @required this.settingsViewModel,
35 + this.initialPaymentRequest,
36 + }) : _formKey = GlobalKey<FormState>(),fiatFromSettings = settingsViewModel.fiatCurrency;
37
38 final SendViewModel sendViewModel;
39 final SettingsViewModel settingsViewModel;
40 final GlobalKey<FormState> _formKey;
41 final controller = PageController(initialPage: 0);
37 - final FiatCurrency fiatFromSettings ;
42 + final FiatCurrency fiatFromSettings;
43 + final PaymentRequest initialPaymentRequest;
44
45 bool _effectsInstalled = false;
46
@@ -116,6 +122,7 @@ class SendPage extends BasePage {
122 key: output.key,
123 output: output,
124 sendViewModel: sendViewModel,
125 + initialPaymentRequest: initialPaymentRequest,
126 );
127 });
128 },
lib/src/screens/send/widgets/send_card.dart
+29 -8
@@ -19,23 +19,35 @@ import 'package:cake_wallet/generated/i18n.dart';
19 import 'package:cake_wallet/src/widgets/base_text_form_field.dart';
20
21 class SendCard extends StatefulWidget {
22 - SendCard({Key key, @required this.output, @required this.sendViewModel}) : super(key: key);
22 + SendCard({
23 + Key key,
24 + @required this.output,
25 + @required this.sendViewModel,
26 + this.initialPaymentRequest,
27 + }) : super(key: key);
28
29 final Output output;
30 final SendViewModel sendViewModel;
31 + final PaymentRequest initialPaymentRequest;
32
33 @override
28 - SendCardState createState() => SendCardState(
34 + SendCardState createState() {
35 + return SendCardState(
36 output: output,
30 - sendViewModel: sendViewModel
37 + sendViewModel: sendViewModel,
38 + initialPaymentRequest: initialPaymentRequest,
39 );
40 + }
41 }
42
43 class SendCardState extends State<SendCard>
44 with AutomaticKeepAliveClientMixin<SendCard> {
36 - SendCardState({@required this.output, @required this.sendViewModel})
37 - : addressController = TextEditingController(),
38 - cryptoAmountController = TextEditingController(),
45 + SendCardState({
46 + @required this.output,
47 + @required this.sendViewModel,
48 + PaymentRequest initialPaymentRequest})
49 + : addressController = TextEditingController(text: initialPaymentRequest?.address),
50 + cryptoAmountController = TextEditingController(text: initialPaymentRequest?.amount),
51 fiatAmountController = TextEditingController(),
52 noteController = TextEditingController(),
53 extractedAddressController = TextEditingController(),
@@ -111,6 +123,11 @@ class SendCardState extends State<SendCard>
123 ? sendViewModel.textValidator
124 : sendViewModel.addressValidator;
125
126 + print("@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@");
127 + print("444444444444444444444444444444");
128 + print(addressController.text);
129 + print(cryptoAmountController.text);
130 +
131 return AddressTextField(
132 focusNode: addressFocusNode,
133 controller: addressController,
@@ -509,8 +526,12 @@ class SendCardState extends State<SendCard>
526 }
527
528 void _setEffects(BuildContext context) {
512 - addressController.text = output.address;
513 - cryptoAmountController.text = output.cryptoAmount;
529 + if (output.address.isNotEmpty) {
530 + addressController.text = output.address;
531 + }
532 + if (output.cryptoAmount.isNotEmpty) {
533 + cryptoAmountController.text = output.cryptoAmount;
534 + }
535 fiatAmountController.text = output.fiatAmount;
536 noteController.text = output.note;
537 extractedAddressController.text = output.extractedAddress;