mirror of
https://github.com/cake-tech/cake_wallet.git
synced 2025-02-05 20:57:07 +00:00
CAKE-293 | applied webview to the app
This commit is contained in:
parent
60333e235d
commit
76c7108bd7
7 changed files with 84 additions and 4 deletions
|
@ -41,6 +41,7 @@ import 'package:cake_wallet/src/screens/transaction_details/transaction_details_
|
|||
import 'package:cake_wallet/src/screens/wallet_keys/wallet_keys_page.dart';
|
||||
import 'package:cake_wallet/src/screens/exchange/exchange_page.dart';
|
||||
import 'package:cake_wallet/src/screens/exchange/exchange_template_page.dart';
|
||||
import 'package:cake_wallet/src/screens/web_view/web_view_page.dart';
|
||||
import 'package:cake_wallet/store/dashboard/orders_store.dart';
|
||||
import 'package:cake_wallet/store/node_list_store.dart';
|
||||
import 'package:cake_wallet/store/secret_store.dart';
|
||||
|
@ -528,6 +529,9 @@ Future setup(
|
|||
getIt.registerFactoryParam<OrderDetailsPage, Order, void>((Order order, _) =>
|
||||
OrderDetailsPage(getIt.get<OrderDetailsViewModel>(param1: order)));
|
||||
|
||||
getIt.registerFactoryParam<WebViewPage, String, void>((String url, _) =>
|
||||
WebViewPage(url: url));
|
||||
|
||||
getIt.registerFactory(() => SupportViewModel());
|
||||
|
||||
getIt.registerFactory(() => SupportPage(getIt.get<SupportViewModel>()));
|
||||
|
|
|
@ -9,6 +9,7 @@ import 'package:cake_wallet/src/screens/restore/restore_from_backup_page.dart';
|
|||
import 'package:cake_wallet/src/screens/restore/wallet_restore_page.dart';
|
||||
import 'package:cake_wallet/src/screens/seed/pre_seed_page.dart';
|
||||
import 'package:cake_wallet/src/screens/support/support_page.dart';
|
||||
import 'package:cake_wallet/src/screens/web_view/web_view_page.dart';
|
||||
import 'package:cake_wallet/store/settings_store.dart';
|
||||
import 'package:cake_wallet/view_model/monero_account_list/account_list_item.dart';
|
||||
import 'package:flutter/cupertino.dart';
|
||||
|
@ -292,6 +293,11 @@ Route<dynamic> createRoute(RouteSettings settings) {
|
|||
builder: (_) =>
|
||||
getIt.get<OrderDetailsPage>(param1: settings.arguments as Order));
|
||||
|
||||
case Routes.webView:
|
||||
return MaterialPageRoute<void>(
|
||||
builder: (_) =>
|
||||
getIt.get<WebViewPage>(param1: settings.arguments as String));
|
||||
|
||||
case Routes.restoreWalletFromSeedDetails:
|
||||
final args = settings.arguments as List;
|
||||
final walletRestorationFromSeedVM =
|
||||
|
|
|
@ -53,4 +53,5 @@ class Routes {
|
|||
static const restoreFromBackup = '/restore_from_backup';
|
||||
static const support = '/support';
|
||||
static const orderDetails = '/order_details';
|
||||
static const webView = '/web_view';
|
||||
}
|
|
@ -127,7 +127,13 @@ class DashboardPage extends BasePage {
|
|||
if (walletViewModel.type == WalletType.bitcoin) ActionButton(
|
||||
image: buyImage,
|
||||
title: S.of(context).buy,
|
||||
onClick: () => walletViewModel.buyCryptoCurrency()),
|
||||
onClick: () async {
|
||||
final url = await walletViewModel.getWyreUrl();
|
||||
if (url.isNotEmpty) {
|
||||
await Navigator.of(context)
|
||||
.pushNamed(Routes.webView, arguments: url);
|
||||
}
|
||||
}),
|
||||
],
|
||||
)),
|
||||
)
|
||||
|
|
59
lib/src/screens/web_view/web_view_page.dart
Normal file
59
lib/src/screens/web_view/web_view_page.dart
Normal file
|
@ -0,0 +1,59 @@
|
|||
import 'dart:async';
|
||||
import 'dart:io';
|
||||
import 'package:cake_wallet/generated/i18n.dart';
|
||||
import 'package:cake_wallet/src/screens/base_page.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:webview_flutter/webview_flutter.dart';
|
||||
|
||||
class WebViewPage extends BasePage {
|
||||
WebViewPage({@required this.url});
|
||||
|
||||
final String url;
|
||||
|
||||
@override
|
||||
String get title => S.current.buy;
|
||||
|
||||
@override
|
||||
Widget body(BuildContext context) => WebViewPageBody(url: url);
|
||||
}
|
||||
|
||||
class WebViewPageBody extends StatefulWidget {
|
||||
WebViewPageBody({this.url});
|
||||
|
||||
final String url;
|
||||
|
||||
@override
|
||||
WebViewPageBodyState createState() => WebViewPageBodyState();
|
||||
}
|
||||
|
||||
class WebViewPageBodyState extends State<WebViewPageBody> {
|
||||
WebViewController webViewController;
|
||||
|
||||
@override
|
||||
void initState() {
|
||||
super.initState();
|
||||
if (Platform.isAndroid) WebView.platform = SurfaceAndroidWebView();
|
||||
}
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return WebView(
|
||||
initialUrl: widget.url,
|
||||
javascriptMode: JavascriptMode.unrestricted,
|
||||
onWebViewCreated: (WebViewController controller) {
|
||||
setState(() => webViewController = controller);
|
||||
},
|
||||
javascriptChannels: <JavascriptChannel>{
|
||||
JavascriptChannel(
|
||||
name: 'Echo',
|
||||
onMessageReceived: (JavascriptMessage message) {
|
||||
webViewController.evaluateJavascript("console.log('test callback');");
|
||||
},
|
||||
),
|
||||
},
|
||||
/*onPageFinished: (url) {
|
||||
webViewController.evaluateJavascript("alert('Test alert');");
|
||||
},*/
|
||||
);
|
||||
}
|
||||
}
|
|
@ -326,7 +326,7 @@ abstract class DashboardViewModelBase with Store {
|
|||
settingsStore: appStore.settingsStore)));
|
||||
}
|
||||
|
||||
void buyCryptoCurrency() async {
|
||||
Future<String> getWyreUrl() async {
|
||||
final timestamp = DateTime.now().millisecondsSinceEpoch.toString();
|
||||
final url = 'https://api.testwyre.com/v3/orders/reserve' + '?timestamp=' +
|
||||
timestamp;
|
||||
|
@ -337,7 +337,7 @@ abstract class DashboardViewModelBase with Store {
|
|||
//'destCurrency' : walletTypeToCryptoCurrency(type).title,
|
||||
//'dest' : walletTypeToString(type).toLowerCase() + ':' + address,
|
||||
'referrerAccountId' : accountId,
|
||||
'redirectUrl' : 'http://google.com'
|
||||
//'redirectUrl' : 'http://google.com'
|
||||
//'redirectUrl' : 'cakewallet://wyre-trade-success'
|
||||
//'lockFields' : ['destCurrency', 'dest']
|
||||
};
|
||||
|
@ -354,7 +354,8 @@ abstract class DashboardViewModelBase with Store {
|
|||
if (response.statusCode == 200) {
|
||||
final responseJSON = json.decode(response.body) as Map<String, dynamic>;
|
||||
final urlFromResponse = responseJSON['url'] as String;
|
||||
if (await canLaunch(urlFromResponse)) await launch(urlFromResponse);
|
||||
return urlFromResponse;
|
||||
//if (await canLaunch(urlFromResponse)) await launch(urlFromResponse);
|
||||
|
||||
/*final orderId = '';
|
||||
final order = await findOrderById(orderId);
|
||||
|
@ -362,6 +363,8 @@ abstract class DashboardViewModelBase with Store {
|
|||
order.walletId = wallet.id;
|
||||
await ordersSource.add(order);
|
||||
ordersStore.setOrder(order);*/
|
||||
} else {
|
||||
return '';
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -55,6 +55,7 @@ dependencies:
|
|||
auto_size_text: ^2.1.0
|
||||
dotted_border: ^1.0.5
|
||||
smooth_page_indicator: ^0.2.0
|
||||
webview_flutter: ^1.0.7
|
||||
|
||||
# The following adds the Cupertino Icons font to your application.
|
||||
# Use with the CupertinoIcons class for iOS style icons.
|
||||
|
|
Loading…
Reference in a new issue