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;