diff --git a/lib/di.dart b/lib/di.dart index 16328fb5..b6ef82e8 100644 --- a/lib/di.dart +++ b/lib/di.dart @@ -530,7 +530,7 @@ Future setup( OrderDetailsPage(getIt.get(param1: order))); getIt.registerFactoryParam((String url, _) => - WebViewPage(url: url)); + WebViewPage(ordersStore: getIt.get(), url: url)); getIt.registerFactory(() => SupportViewModel()); diff --git a/lib/src/screens/dashboard/dashboard_page.dart b/lib/src/screens/dashboard/dashboard_page.dart index d73f26b7..7f52bacf 100644 --- a/lib/src/screens/dashboard/dashboard_page.dart +++ b/lib/src/screens/dashboard/dashboard_page.dart @@ -1,3 +1,4 @@ +import 'package:cake_wallet/entities/find_order_by_id.dart'; import 'package:cake_wallet/entities/wallet_type.dart'; import 'package:cake_wallet/generated/i18n.dart'; import 'package:cake_wallet/routes.dart'; @@ -132,6 +133,12 @@ class DashboardPage extends BasePage { if (url.isNotEmpty) { await Navigator.of(context) .pushNamed(Routes.webView, arguments: url); + + final orderId = walletViewModel.ordersStore.orderId; + + if (orderId.isNotEmpty) { + await walletViewModel.saveOrder(orderId); + } } }), ], diff --git a/lib/src/screens/web_view/web_view_page.dart b/lib/src/screens/web_view/web_view_page.dart index 288262dd..e7a8a68a 100644 --- a/lib/src/screens/web_view/web_view_page.dart +++ b/lib/src/screens/web_view/web_view_page.dart @@ -1,24 +1,28 @@ import 'dart:io'; import 'package:cake_wallet/generated/i18n.dart'; import 'package:cake_wallet/src/screens/base_page.dart'; +import 'package:cake_wallet/store/dashboard/orders_store.dart'; import 'package:flutter/material.dart'; import 'package:webview_flutter/webview_flutter.dart'; class WebViewPage extends BasePage { - WebViewPage({@required this.url}); + WebViewPage({@required this.ordersStore, @required this.url}); + final OrdersStore ordersStore; final String url; @override String get title => S.current.buy; @override - Widget body(BuildContext context) => WebViewPageBody(url: url); + Widget body(BuildContext context) => + WebViewPageBody(ordersStore: ordersStore,url: url); } class WebViewPageBody extends StatefulWidget { - WebViewPageBody({this.url}); + WebViewPageBody({this.ordersStore, this.url}); + final OrdersStore ordersStore; final String url; @override @@ -34,6 +38,7 @@ class WebViewPageBodyState extends State { void initState() { super.initState(); _webViewkey = GlobalKey(); + widget.ordersStore.orderId = ''; if (Platform.isAndroid) WebView.platform = SurfaceAndroidWebView(); } @@ -53,7 +58,7 @@ class WebViewPageBodyState extends State { currentUrl.contains('completed')) { final urlParts = currentUrl.split('/'); orderId = urlParts.last; - print(orderId); + widget.ordersStore.orderId = orderId; } return NavigationDecision.navigate; diff --git a/lib/store/dashboard/orders_store.dart b/lib/store/dashboard/orders_store.dart index 70cfd9d4..1aad9f5b 100644 --- a/lib/store/dashboard/orders_store.dart +++ b/lib/store/dashboard/orders_store.dart @@ -13,6 +13,8 @@ abstract class OrdersStoreBase with Store { OrdersStoreBase({this.ordersSource, this.settingsStore}) { orders = []; + orderId = ''; + _onOrdersChanged = ordersSource.watch().listen((_) async => await updateOrderList()); @@ -29,6 +31,9 @@ abstract class OrdersStoreBase with Store { @observable Order order; + @observable + String orderId; + @action void setOrder(Order order) => this.order = order; diff --git a/lib/view_model/dashboard/dashboard_view_model.dart b/lib/view_model/dashboard/dashboard_view_model.dart index 5f97cd29..4af71e8e 100644 --- a/lib/view_model/dashboard/dashboard_view_model.dart +++ b/lib/view_model/dashboard/dashboard_view_model.dart @@ -330,15 +330,13 @@ abstract class DashboardViewModelBase with Store { final timestamp = DateTime.now().millisecondsSinceEpoch.toString(); final url = 'https://api.testwyre.com/v3/orders/reserve' + '?timestamp=' + timestamp; - final apiKey = secrets.wyre_api_key; - final secretKey = secrets.wyre_secret_key; - final accountId = secrets.wyre_account_id; + final apiKey = secrets.wyreApiKey; + final secretKey = secrets.wyreSecretKey; + final accountId = secrets.wyreAccountId; final body = { //'destCurrency' : walletTypeToCryptoCurrency(type).title, //'dest' : walletTypeToString(type).toLowerCase() + ':' + address, 'referrerAccountId' : accountId, - //'redirectUrl' : 'http://google.com' - //'redirectUrl' : 'cakewallet://wyre-trade-success' //'lockFields' : ['destCurrency', 'dest'] }; @@ -355,16 +353,16 @@ abstract class DashboardViewModelBase with Store { final responseJSON = json.decode(response.body) as Map; final urlFromResponse = responseJSON['url'] as String; return urlFromResponse; - //if (await canLaunch(urlFromResponse)) await launch(urlFromResponse); - - /*final orderId = ''; - final order = await findOrderById(orderId); - order.receiveAddress = address; - order.walletId = wallet.id; - await ordersSource.add(order); - ordersStore.setOrder(order);*/ } else { return ''; } } + + Future saveOrder(String orderId) async { + final order = await findOrderById(orderId); + order.receiveAddress = address; + order.walletId = wallet.id; + await ordersSource.add(order); + ordersStore.setOrder(order); + } }