CAKE-279 | saved orderId in the orders store; added saveOrder() method to the dashboard_view_model.dart

OleksandrSobol committed Mar 17, 2021 at 20:21 UTC d752692c3f039846c7b4dcca714d39a4d30d508e
5 files changed +33 -18
lib/di.dart
+1 -1
@@ -530,7 +530,7 @@ Future setup(
530 OrderDetailsPage(getIt.get<OrderDetailsViewModel>(param1: order)));
531
532 getIt.registerFactoryParam<WebViewPage, String, void>((String url, _) =>
533 - WebViewPage(url: url));
533 + WebViewPage(ordersStore: getIt.get<OrdersStore>(), url: url));
534
535 getIt.registerFactory(() => SupportViewModel());
536
lib/src/screens/dashboard/dashboard_page.dart
+7
@@ -1,3 +1,4 @@
1 +import 'package:cake_wallet/entities/find_order_by_id.dart';
2 import 'package:cake_wallet/entities/wallet_type.dart';
3 import 'package:cake_wallet/generated/i18n.dart';
4 import 'package:cake_wallet/routes.dart';
@@ -132,6 +133,12 @@ class DashboardPage extends BasePage {
133 if (url.isNotEmpty) {
134 await Navigator.of(context)
135 .pushNamed(Routes.webView, arguments: url);
136 +
137 + final orderId = walletViewModel.ordersStore.orderId;
138 +
139 + if (orderId.isNotEmpty) {
140 + await walletViewModel.saveOrder(orderId);
141 + }
142 }
143 }),
144 ],
lib/src/screens/web_view/web_view_page.dart
+9 -4
@@ -1,24 +1,28 @@
1 import 'dart:io';
2 import 'package:cake_wallet/generated/i18n.dart';
3 import 'package:cake_wallet/src/screens/base_page.dart';
4 +import 'package:cake_wallet/store/dashboard/orders_store.dart';
5 import 'package:flutter/material.dart';
6 import 'package:webview_flutter/webview_flutter.dart';
7
8 class WebViewPage extends BasePage {
8 - WebViewPage({@required this.url});
9 + WebViewPage({@required this.ordersStore, @required this.url});
10
11 + final OrdersStore ordersStore;
12 final String url;
13
14 @override
15 String get title => S.current.buy;
16
17 @override
16 - Widget body(BuildContext context) => WebViewPageBody(url: url);
18 + Widget body(BuildContext context) =>
19 + WebViewPageBody(ordersStore: ordersStore,url: url);
20 }
21
22 class WebViewPageBody extends StatefulWidget {
20 - WebViewPageBody({this.url});
23 + WebViewPageBody({this.ordersStore, this.url});
24
25 + final OrdersStore ordersStore;
26 final String url;
27
28 @override
@@ -34,6 +38,7 @@ class WebViewPageBodyState extends State<WebViewPageBody> {
38 void initState() {
39 super.initState();
40 _webViewkey = GlobalKey();
41 + widget.ordersStore.orderId = '';
42
43 if (Platform.isAndroid) WebView.platform = SurfaceAndroidWebView();
44 }
@@ -53,7 +58,7 @@ class WebViewPageBodyState extends State<WebViewPageBody> {
58 currentUrl.contains('completed')) {
59 final urlParts = currentUrl.split('/');
60 orderId = urlParts.last;
56 - print(orderId);
61 + widget.ordersStore.orderId = orderId;
62 }
63
64 return NavigationDecision.navigate;
lib/store/dashboard/orders_store.dart
+5
@@ -13,6 +13,8 @@ abstract class OrdersStoreBase with Store {
13 OrdersStoreBase({this.ordersSource, this.settingsStore}) {
14 orders = <OrderListItem>[];
15
16 + orderId = '';
17 +
18 _onOrdersChanged =
19 ordersSource.watch().listen((_) async => await updateOrderList());
20
@@ -29,6 +31,9 @@ abstract class OrdersStoreBase with Store {
31 @observable
32 Order order;
33
34 + @observable
35 + String orderId;
36 +
37 @action
38 void setOrder(Order order) => this.order = order;
39
lib/view_model/dashboard/dashboard_view_model.dart
+11 -13
@@ -330,15 +330,13 @@ abstract class DashboardViewModelBase with Store {
330 final timestamp = DateTime.now().millisecondsSinceEpoch.toString();
331 final url = 'https://api.testwyre.com/v3/orders/reserve' + '?timestamp=' +
332 timestamp;
333 - final apiKey = secrets.wyre_api_key;
334 - final secretKey = secrets.wyre_secret_key;
335 - final accountId = secrets.wyre_account_id;
333 + final apiKey = secrets.wyreApiKey;
334 + final secretKey = secrets.wyreSecretKey;
335 + final accountId = secrets.wyreAccountId;
336 final body = {
337 //'destCurrency' : walletTypeToCryptoCurrency(type).title,
338 //'dest' : walletTypeToString(type).toLowerCase() + ':' + address,
339 'referrerAccountId' : accountId,
340 - //'redirectUrl' : 'http://google.com'
341 - //'redirectUrl' : 'cakewallet://wyre-trade-success'
340 //'lockFields' : ['destCurrency', 'dest']
341 };
342
@@ -355,16 +353,16 @@ abstract class DashboardViewModelBase with Store {
353 final responseJSON = json.decode(response.body) as Map<String, dynamic>;
354 final urlFromResponse = responseJSON['url'] as String;
355 return urlFromResponse;
358 - //if (await canLaunch(urlFromResponse)) await launch(urlFromResponse);
359 -
360 - /*final orderId = '';
361 - final order = await findOrderById(orderId);
362 - order.receiveAddress = address;
363 - order.walletId = wallet.id;
364 - await ordersSource.add(order);
365 - ordersStore.setOrder(order);*/
356 } else {
357 return '';
358 }
359 }
360 +
361 + Future<void> saveOrder(String orderId) async {
362 + final order = await findOrderById(orderId);
363 + order.receiveAddress = address;
364 + order.walletId = wallet.id;
365 + await ordersSource.add(order);
366 + ordersStore.setOrder(order);
367 + }
368 }