CAKE-293 | applied webview to the app
OleksandrSobol committed
Mar 17, 2021 at 12:32 UTC
76c7108bd7430f27460a54facde957fbf8cc9b32
7 files changed
+84
-4
lib/di.dart
+4
@@ -41,6 +41,7 @@ import 'package:cake_wallet/src/screens/transaction_details/transaction_details_
41
import 'package:cake_wallet/src/screens/wallet_keys/wallet_keys_page.dart';
42
import 'package:cake_wallet/src/screens/exchange/exchange_page.dart';
43
import 'package:cake_wallet/src/screens/exchange/exchange_template_page.dart';
44
+import 'package:cake_wallet/src/screens/web_view/web_view_page.dart';
45
import 'package:cake_wallet/store/dashboard/orders_store.dart';
46
import 'package:cake_wallet/store/node_list_store.dart';
47
import 'package:cake_wallet/store/secret_store.dart';
@@ -528,6 +529,9 @@ Future setup(
529
getIt.registerFactoryParam<OrderDetailsPage, Order, void>((Order order, _) =>
530
OrderDetailsPage(getIt.get<OrderDetailsViewModel>(param1: order)));
531
532
+ getIt.registerFactoryParam<WebViewPage, String, void>((String url, _) =>
533
+ WebViewPage(url: url));
534
+
535
getIt.registerFactory(() => SupportViewModel());
536
537
getIt.registerFactory(() => SupportPage(getIt.get<SupportViewModel>()));
lib/router.dart
+6
@@ -9,6 +9,7 @@ import 'package:cake_wallet/src/screens/restore/restore_from_backup_page.dart';
9
import 'package:cake_wallet/src/screens/restore/wallet_restore_page.dart';
10
import 'package:cake_wallet/src/screens/seed/pre_seed_page.dart';
11
import 'package:cake_wallet/src/screens/support/support_page.dart';
12
+import 'package:cake_wallet/src/screens/web_view/web_view_page.dart';
13
import 'package:cake_wallet/store/settings_store.dart';
14
import 'package:cake_wallet/view_model/monero_account_list/account_list_item.dart';
15
import 'package:flutter/cupertino.dart';
@@ -292,6 +293,11 @@ Route<dynamic> createRoute(RouteSettings settings) {
293
builder: (_) =>
294
getIt.get<OrderDetailsPage>(param1: settings.arguments as Order));
295
296
+ case Routes.webView:
297
+ return MaterialPageRoute<void>(
298
+ builder: (_) =>
299
+ getIt.get<WebViewPage>(param1: settings.arguments as String));
300
+
301
case Routes.restoreWalletFromSeedDetails:
302
final args = settings.arguments as List;
303
final walletRestorationFromSeedVM =
lib/routes.dart
+1
@@ -53,4 +53,5 @@ class Routes {
53
static const restoreFromBackup = '/restore_from_backup';
54
static const support = '/support';
55
static const orderDetails = '/order_details';
56
+ static const webView = '/web_view';
57
}
\ No newline at end of file
lib/src/screens/dashboard/dashboard_page.dart
+7
-1
@@ -127,7 +127,13 @@ class DashboardPage extends BasePage {
127
if (walletViewModel.type == WalletType.bitcoin) ActionButton(
128
image: buyImage,
129
title: S.of(context).buy,
130
- onClick: () => walletViewModel.buyCryptoCurrency()),
130
+ onClick: () async {
131
+ final url = await walletViewModel.getWyreUrl();
132
+ if (url.isNotEmpty) {
133
+ await Navigator.of(context)
134
+ .pushNamed(Routes.webView, arguments: url);
135
+ }
136
+ }),
137
],
138
)),
139
)
lib/src/screens/web_view/web_view_page.dart
new
+59
@@ -0,0 +1,59 @@
1
+import 'dart:async';
2
+import 'dart:io';
3
+import 'package:cake_wallet/generated/i18n.dart';
4
+import 'package:cake_wallet/src/screens/base_page.dart';
5
+import 'package:flutter/material.dart';
6
+import 'package:webview_flutter/webview_flutter.dart';
7
+
8
+class WebViewPage extends BasePage {
9
+ WebViewPage({@required this.url});
10
+
11
+ final String url;
12
+
13
+ @override
14
+ String get title => S.current.buy;
15
+
16
+ @override
17
+ Widget body(BuildContext context) => WebViewPageBody(url: url);
18
+}
19
+
20
+class WebViewPageBody extends StatefulWidget {
21
+ WebViewPageBody({this.url});
22
+
23
+ final String url;
24
+
25
+ @override
26
+ WebViewPageBodyState createState() => WebViewPageBodyState();
27
+}
28
+
29
+class WebViewPageBodyState extends State<WebViewPageBody> {
30
+ WebViewController webViewController;
31
+
32
+ @override
33
+ void initState() {
34
+ super.initState();
35
+ if (Platform.isAndroid) WebView.platform = SurfaceAndroidWebView();
36
+ }
37
+
38
+ @override
39
+ Widget build(BuildContext context) {
40
+ return WebView(
41
+ initialUrl: widget.url,
42
+ javascriptMode: JavascriptMode.unrestricted,
43
+ onWebViewCreated: (WebViewController controller) {
44
+ setState(() => webViewController = controller);
45
+ },
46
+ javascriptChannels: <JavascriptChannel>{
47
+ JavascriptChannel(
48
+ name: 'Echo',
49
+ onMessageReceived: (JavascriptMessage message) {
50
+ webViewController.evaluateJavascript("console.log('test callback');");
51
+ },
52
+ ),
53
+ },
54
+ /*onPageFinished: (url) {
55
+ webViewController.evaluateJavascript("alert('Test alert');");
56
+ },*/
57
+ );
58
+ }
59
+}
\ No newline at end of file
lib/view_model/dashboard/dashboard_view_model.dart
+6
-3
@@ -326,7 +326,7 @@ abstract class DashboardViewModelBase with Store {
326
settingsStore: appStore.settingsStore)));
327
}
328
329
- void buyCryptoCurrency() async {
329
+ Future<String> getWyreUrl() async {
330
final timestamp = DateTime.now().millisecondsSinceEpoch.toString();
331
final url = 'https://api.testwyre.com/v3/orders/reserve' + '?timestamp=' +
332
timestamp;
@@ -337,7 +337,7 @@ abstract class DashboardViewModelBase with Store {
337
//'destCurrency' : walletTypeToCryptoCurrency(type).title,
338
//'dest' : walletTypeToString(type).toLowerCase() + ':' + address,
339
'referrerAccountId' : accountId,
340
- 'redirectUrl' : 'http://google.com'
340
+ //'redirectUrl' : 'http://google.com'
341
//'redirectUrl' : 'cakewallet://wyre-trade-success'
342
//'lockFields' : ['destCurrency', 'dest']
343
};
@@ -354,7 +354,8 @@ abstract class DashboardViewModelBase with Store {
354
if (response.statusCode == 200) {
355
final responseJSON = json.decode(response.body) as Map<String, dynamic>;
356
final urlFromResponse = responseJSON['url'] as String;
357
- if (await canLaunch(urlFromResponse)) await launch(urlFromResponse);
357
+ return urlFromResponse;
358
+ //if (await canLaunch(urlFromResponse)) await launch(urlFromResponse);
359
360
/*final orderId = '';
361
final order = await findOrderById(orderId);
@@ -362,6 +363,8 @@ abstract class DashboardViewModelBase with Store {
363
order.walletId = wallet.id;
364
await ordersSource.add(order);
365
ordersStore.setOrder(order);*/
366
+ } else {
367
+ return '';
368
}
369
}
370
}
pubspec.yaml
+1
@@ -55,6 +55,7 @@ dependencies:
55
auto_size_text: ^2.1.0
56
dotted_border: ^1.0.5
57
smooth_page_indicator: ^0.2.0
58
+ webview_flutter: ^1.0.7
59
60
# The following adds the Cupertino Icons font to your application.
61
# Use with the CupertinoIcons class for iOS style icons.