Add onramper widget for buy screen (#571)
mkyq committed
Oct 27, 2022 at 17:33 UTC
b2a5c66c372d17a7c8ef2ef6ff70bd8e9aeb4622
6 files changed
+96
-3
lib/di.dart
+5
@@ -4,6 +4,7 @@ import 'package:cake_wallet/entities/wake_lock.dart';
4
import 'package:cake_wallet/ionia/ionia_anypay.dart';
5
import 'package:cake_wallet/ionia/ionia_gift_card.dart';
6
import 'package:cake_wallet/ionia/ionia_tip.dart';
7
+import 'package:cake_wallet/src/screens/buy/onramper_page.dart';
8
import 'package:cake_wallet/src/screens/ionia/cards/ionia_custom_redeem_page.dart';
9
import 'package:cake_wallet/src/screens/ionia/cards/ionia_gift_card_detail_page.dart';
10
import 'package:cake_wallet/src/screens/ionia/cards/ionia_more_options_page.dart';
@@ -482,6 +483,10 @@ Future setup(
483
getIt.registerFactory(
484
() => NodeCreateOrEditPage(getIt.get<NodeCreateOrEditViewModel>()));
485
486
+ getIt.registerFactory(() => OnRamperPage(
487
+ settingsStore: getIt.get<AppStore>().settingsStore,
488
+ wallet: getIt.get<AppStore>().wallet!));
489
+
490
getIt.registerFactory(() => ExchangeViewModel(
491
getIt.get<AppStore>().wallet!,
492
_tradesSource,
lib/router.dart
+4
@@ -3,6 +3,7 @@ import 'package:cake_wallet/buy/order.dart';
3
import 'package:cake_wallet/src/screens/backup/backup_page.dart';
4
import 'package:cake_wallet/src/screens/backup/edit_backup_password_page.dart';
5
import 'package:cake_wallet/src/screens/buy/buy_webview_page.dart';
6
+import 'package:cake_wallet/src/screens/buy/onramper_page.dart';
7
import 'package:cake_wallet/src/screens/buy/pre_order_page.dart';
8
import 'package:cake_wallet/src/screens/ionia/cards/ionia_account_cards_page.dart';
9
import 'package:cake_wallet/src/screens/ionia/cards/ionia_account_page.dart';
@@ -471,6 +472,9 @@ Route<dynamic> createRoute(RouteSettings settings) {
472
param1: paymentInfo,
473
param2: commitedInfo));
474
475
+ case Routes.onramperPage:
476
+ return CupertinoPageRoute<void>(builder: (_) => getIt.get<OnRamperPage>());
477
+
478
default:
479
return MaterialPageRoute<void>(
480
builder: (_) => Scaffold(
lib/routes.dart
+1
@@ -76,4 +76,5 @@ class Routes {
76
static const ioniaPaymentStatusPage = '/ionia_payment_status_page';
77
static const ioniaMoreOptionsPage = '/ionia_more_options_page';
78
static const ioniaCustomRedeemPage = '/ionia_custom_redeem_page';
79
+ static const onramperPage = '/onramper';
80
}
lib/src/screens/buy/onramper_page.dart
new
+82
@@ -0,0 +1,82 @@
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/settings_store.dart';
5
+import 'package:cw_core/wallet_base.dart';
6
+import 'package:flutter/material.dart';
7
+import 'package:webview_flutter/webview_flutter.dart';
8
+import 'package:cake_wallet/.secrets.g.dart' as secrets;
9
+
10
+class OnRamperPage extends BasePage {
11
+ OnRamperPage({
12
+ required this.settingsStore,
13
+ required this.wallet});
14
+
15
+ final SettingsStore settingsStore;
16
+ final WalletBase wallet;
17
+
18
+ @override
19
+ String get title => S.current.buy;
20
+
21
+ @override
22
+ Widget body(BuildContext context) {
23
+ final darkMode = Theme.of(context).brightness == Brightness.dark;
24
+ return OnRamperPageBody(
25
+ settingsStore: settingsStore,
26
+ wallet: wallet,
27
+ darkMode: darkMode,
28
+ backgroundColor: darkMode
29
+ ? backgroundDarkColor
30
+ : backgroundLightColor,
31
+ supportSell: false);
32
+ }
33
+}
34
+
35
+class OnRamperPageBody extends StatefulWidget {
36
+ OnRamperPageBody({
37
+ required this.settingsStore,
38
+ required this.wallet,
39
+ required this.darkMode,
40
+ required this.supportSell,
41
+ required this.backgroundColor});
42
+
43
+ static const baseUrl = 'widget.onramper.com';
44
+ final SettingsStore settingsStore;
45
+ final WalletBase wallet;
46
+ final Color backgroundColor;
47
+ final bool darkMode;
48
+ final bool supportSell;
49
+
50
+ Uri get uri
51
+ => Uri.https(
52
+ baseUrl,
53
+ '',
54
+ <String, dynamic>{
55
+ 'apiKey': secrets.onramperApiKey,
56
+ 'defaultCrypto': wallet.currency.title,
57
+ 'defaultFiat': settingsStore.fiatCurrency.title,
58
+ 'wallets': '${wallet.currency.title}:${wallet.walletAddresses.address}',
59
+ 'darkMode': darkMode.toString(),
60
+ 'supportSell': supportSell.toString()});
61
+
62
+ @override
63
+ OnRamperPageBodyState createState() => OnRamperPageBodyState();
64
+}
65
+
66
+class OnRamperPageBodyState extends State<OnRamperPageBody> {
67
+ OnRamperPageBodyState();
68
+
69
+ @override
70
+ void initState() {
71
+ super.initState();
72
+ if (Platform.isAndroid) WebView.platform = SurfaceAndroidWebView();
73
+ }
74
+
75
+ @override
76
+ Widget build(BuildContext context) {
77
+ return WebView(
78
+ initialUrl: widget.uri.toString(),
79
+ backgroundColor: widget.backgroundColor,
80
+ javascriptMode: JavascriptMode.unrestricted);
81
+ }
82
+}
lib/src/screens/dashboard/dashboard_page.dart
+2
-2
@@ -271,10 +271,10 @@ class DashboardPage extends BasePage {
271
272
switch (walletType) {
273
case WalletType.bitcoin:
274
- Navigator.of(context).pushNamed(Routes.preOrder);
274
+ Navigator.of(context).pushNamed(Routes.onramperPage);
275
break;
276
case WalletType.litecoin:
277
- Navigator.of(context).pushNamed(Routes.preOrder);
277
+ Navigator.of(context).pushNamed(Routes.onramperPage);
278
break;
279
default:
280
await showPopUp<void>(
tool/utils/secret_key.dart
+2
-1
@@ -25,7 +25,8 @@ class SecretKey {
25
SecretKey('moonPaySecretKey', () => ''),
26
SecretKey('sideShiftAffiliateId', () => ''),
27
SecretKey('sideShiftApiKey', () => ''),
28
- SecretKey('simpleSwapApiKey', () => '')
28
+ SecretKey('simpleSwapApiKey', () => ''),
29
+ SecretKey('onramperApiKey', () => ''),
30
];
31
32
final String name;