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;