set launchUrl mode to LaunchMode.externalApplication

Serhii committed May 23, 2024 at 14:00 UTC f401dafdca49b3c3b75217b3ac983b65e807ca56
13 files changed +40 -57
lib/buy/dfx/dfx_buy_provider.dart
+1 -6
@@ -5,7 +5,6 @@ import 'package:cake_wallet/generated/i18n.dart';
5 import 'package:cake_wallet/routes.dart';
6 import 'package:cake_wallet/src/screens/connect_device/connect_device_page.dart';
7 import 'package:cake_wallet/src/widgets/alert_with_one_action.dart';
8 -import 'package:cake_wallet/utils/device_info.dart';
8 import 'package:cake_wallet/utils/show_pop_up.dart';
9 import 'package:cake_wallet/view_model/hardware_wallet/ledger_view_model.dart';
10 import 'package:cw_core/wallet_base.dart';
@@ -167,11 +166,7 @@ class DFXBuyProvider extends BuyProvider {
166 });
167
168 if (await canLaunchUrl(uri)) {
170 - if (DeviceInfo.instance.isMobile) {
171 - Navigator.of(context).pushNamed(Routes.webViewPage, arguments: [title, uri]);
172 - } else {
173 - await launchUrl(uri, mode: LaunchMode.externalApplication);
174 - }
169 + await launchUrl(uri, mode: LaunchMode.externalApplication);
170 } else {
171 throw Exception('Could not launch URL');
172 }
lib/buy/moonpay/moonpay_provider.dart
+1 -7
@@ -9,11 +9,9 @@ import 'package:cake_wallet/buy/order.dart';
9 import 'package:cake_wallet/exchange/trade_state.dart';
10 import 'package:cake_wallet/generated/i18n.dart';
11 import 'package:cake_wallet/palette.dart';
12 -import 'package:cake_wallet/routes.dart';
12 import 'package:cake_wallet/src/widgets/alert_with_one_action.dart';
13 import 'package:cake_wallet/store/settings_store.dart';
14 import 'package:cake_wallet/themes/theme_base.dart';
16 -import 'package:cake_wallet/utils/device_info.dart';
15 import 'package:cw_core/crypto_currency.dart';
16 import 'package:cw_core/wallet_base.dart';
17 import 'package:cw_core/wallet_type.dart';
@@ -272,11 +270,7 @@ class MoonPayProvider extends BuyProvider {
270 }
271
272 if (await canLaunchUrl(uri)) {
275 - if (DeviceInfo.instance.isMobile) {
276 - Navigator.of(context).pushNamed(Routes.webViewPage, arguments: ['MoonPay', uri]);
277 - } else {
278 - await launchUrl(uri, mode: LaunchMode.externalApplication);
279 - }
273 + await launchUrl(uri, mode: LaunchMode.externalApplication);
274 } else {
275 throw Exception('Could not launch URL');
276 }
lib/buy/onramper/onramper_buy_provider.dart
+1 -8
@@ -1,10 +1,8 @@
1 import 'package:cake_wallet/.secrets.g.dart' as secrets;
2 import 'package:cake_wallet/buy/buy_provider.dart';
3 import 'package:cake_wallet/generated/i18n.dart';
4 -import 'package:cake_wallet/routes.dart';
4 import 'package:cake_wallet/store/settings_store.dart';
5 import 'package:cake_wallet/themes/extensions/cake_text_theme.dart';
7 -import 'package:cake_wallet/utils/device_info.dart';
6 import 'package:cw_core/crypto_currency.dart';
7 import 'package:cw_core/wallet_base.dart';
8 import 'package:flutter/material.dart';
@@ -94,11 +92,6 @@ class OnRamperBuyProvider extends BuyProvider {
92
93 Future<void> launchProvider(BuildContext context, bool? isBuyAction) async {
94 final uri = requestOnramperUrl(context, isBuyAction);
97 - if (DeviceInfo.instance.isMobile) {
98 - Navigator.of(context)
99 - .pushNamed(Routes.webViewPage, arguments: [title, uri]);
100 - } else {
101 - await launchUrl(uri);
102 - }
95 + await launchUrl(uri, mode: LaunchMode.externalApplication);
96 }
97 }
lib/src/screens/dashboard/pages/transactions_page.dart
+1 -6
@@ -2,7 +2,6 @@ import 'package:cake_wallet/src/screens/dashboard/widgets/anonpay_transaction_ro
2 import 'package:cake_wallet/src/screens/dashboard/widgets/order_row.dart';
3 import 'package:cake_wallet/themes/extensions/placeholder_theme.dart';
4 import 'package:cake_wallet/src/widgets/dashboard_card_widget.dart';
5 -import 'package:cake_wallet/utils/device_info.dart';
5 import 'package:cake_wallet/utils/responsive_layout_util.dart';
6 import 'package:cake_wallet/view_model/dashboard/anonpay_transaction_list_item.dart';
7 import 'package:cake_wallet/view_model/dashboard/order_list_item.dart';
@@ -52,11 +51,7 @@ class TransactionsPage extends StatelessWidget {
51 try {
52 final uri = Uri.parse(
53 "https://guides.cakewallet.com/docs/FAQ/why_are_my_funds_not_appearing/");
55 - if (DeviceInfo.instance.isMobile) {
56 - Navigator.of(context).pushNamed(Routes.webViewPage, arguments: ['', uri]);
57 - } else {
58 - launchUrl(uri);
59 - }
54 + launchUrl(uri, mode: LaunchMode.externalApplication);
55 } catch (_) {}
56 },
57 title: S.of(context).syncing_wallet_alert_title,
lib/src/screens/disclaimer/disclaimer_page.dart
+5 -5
@@ -46,10 +46,6 @@ class DisclaimerBodyState extends State<DisclaimerPageBody> {
46 bool _checked = false;
47 String _fileText = '';
48
49 - Future<void> launchUrl(String url) async {
50 - if (await canLaunch(url)) await launch(url);
51 - }
52 -
49 Future getFileLines() async {
50 _fileText = await rootBundle.loadString(
51 isMoneroOnly
@@ -152,7 +148,11 @@ class DisclaimerBodyState extends State<DisclaimerPageBody> {
148 children: <Widget>[
149 Expanded(
150 child: GestureDetector(
155 - onTap: () => launchUrl(changenowUrl),
151 + onTap: () async {
152 + final uri = Uri.parse(changenowUrl);
153 + if (await canLaunchUrl(uri))
154 + await launchUrl(uri, mode: LaunchMode.externalApplication);
155 + },
156 child: Text(
157 changenowUrl,
158 textAlign: TextAlign.left,
lib/src/screens/ionia/auth/ionia_create_account_page.dart
+6 -2
@@ -107,7 +107,9 @@ class IoniaCreateAccountPage extends BasePage {
107 ),
108 recognizer: TapGestureRecognizer()
109 ..onTap = () async {
110 - if (await canLaunch(termsAndConditionsUrl)) await launch(termsAndConditionsUrl);
110 + final uri = Uri.parse(termsAndConditionsUrl);
111 + if (await canLaunchUrl(uri))
112 + await launchUrl(uri, mode: LaunchMode.externalApplication);
113 },
114 ),
115 TextSpan(text: ' ${S.of(context).and} '),
@@ -119,7 +121,9 @@ class IoniaCreateAccountPage extends BasePage {
121 ),
122 recognizer: TapGestureRecognizer()
123 ..onTap = () async {
122 - if (await canLaunch(privacyPolicyUrl)) await launch(privacyPolicyUrl);
124 + final uri = Uri.parse(privacyPolicyUrl);
125 + if (await canLaunchUrl(uri))
126 + await launchUrl(uri, mode: LaunchMode.externalApplication);
127 }),
128 TextSpan(text: ' ${S.of(context).by_cake_pay}'),
129 ],
lib/src/screens/settings/widgets/settings_link_provider_cell.dart
+2 -1
@@ -31,7 +31,8 @@ class SettingsLinkProviderCell extends StandardListRow {
31
32 static void _launchUrl(String url) async {
33 try {
34 - await launch(url, forceSafariVC: false);
34 + final uri = Uri.parse(url);
35 + if (await canLaunchUrl(uri)) await launchUrl(uri, mode: LaunchMode.externalApplication);
36 } catch (e) {}
37 }
38 }
lib/src/screens/yat/yat_popup.dart
+10 -11
@@ -161,27 +161,26 @@ class YatPopup extends StatelessWidget {
161 onClose: onClose,
162 onGet: () {
163 var createNewYatUrl = YatLink.startFlowUrl;
164 - final createNewYatUrlParameters = dashboardViewModel.
165 - yatStore.defineQueryParameters();
166 -
164 + final createNewYatUrlParameters =
165 + dashboardViewModel.yatStore.defineQueryParameters();
166 +
167 if (createNewYatUrlParameters.isNotEmpty) {
168 createNewYatUrl += '?sub1=' + createNewYatUrlParameters;
169 }
170
171 - launch(createNewYatUrl, forceSafariVC: false);
171 + final uri = Uri.parse(createNewYatUrl);
172 + launchUrl(uri, mode: LaunchMode.externalApplication);
173 },
174 onConnect: () {
175 String url = baseUrl + YatLink.signInSuffix;
175 - final parameters = dashboardViewModel
176 - .yatStore.defineQueryParameters();
176 + final parameters = dashboardViewModel.yatStore.defineQueryParameters();
177 if (parameters.isNotEmpty) {
178 url += YatLink.queryParameter + parameters;
179 }
180 - launch(url, forceSafariVC: false);
181 - }
182 - ))
183 - : Container()
184 - )
180 + final uri = Uri.parse(url);
181 + launchUrl(uri, mode: LaunchMode.externalApplication);
182 + }))
183 + : Container())
184 ],
185 );
186 }
lib/src/widgets/services_updates_widget.dart
+2 -1
@@ -103,7 +103,8 @@ class _ServicesUpdatesWidgetState extends State<ServicesUpdatesWidget> {
103 child: PrimaryImageButton(
104 onPressed: () {
105 try {
106 - launchUrl(Uri.parse("https://status.cakewallet.com/"));
106 + launchUrl(Uri.parse("https://status.cakewallet.com/"),
107 + mode: LaunchMode.externalApplication);
108 } catch (_) {}
109 },
110 image: Image.asset(
lib/view_model/order_details_view_model.dart
+6 -6
@@ -19,7 +19,7 @@ class OrderDetailsViewModel = OrderDetailsViewModelBase
19
20 abstract class OrderDetailsViewModelBase with Store {
21 OrderDetailsViewModelBase({required WalletBase wallet, required Order orderForDetails})
22 - : items = ObservableList<StandartListItem>(),
22 + : items = ObservableList<StandartListItem>(),
23 order = orderForDetails {
24 if (order.provider != null) {
25 switch (order.provider) {
@@ -101,13 +101,13 @@ abstract class OrderDetailsViewModelBase with Store {
101 TrackTradeListItem(
102 title: S.current.track,
103 value: buildURL,
104 - onTap: () {
104 + onTap: () async {
105 try {
106 - launch(buildURL);
106 + final uri = Uri.parse(buildURL);
107 + if (await canLaunchUrl(uri))
108 + await launchUrl(uri, mode: LaunchMode.externalApplication);
109 } catch (e) {}
108 - }
109 - )
110 - );
110 + }));
111 }
112 }
113
lib/view_model/trade_details_view_model.dart
+1 -1
@@ -179,7 +179,7 @@ abstract class TradeDetailsViewModelBase with Store {
179 void _launchUrl(String url) {
180 final uri = Uri.parse(url);
181 try {
182 - launchUrl(uri);
182 + launchUrl(uri, mode: LaunchMode.externalApplication);
183 } catch (e) {}
184 }
185 }
lib/view_model/transaction_details_view_model.dart
+3 -2
@@ -99,9 +99,10 @@ abstract class TransactionDetailsViewModelBase with Store {
99 items.add(BlockExplorerListItem(
100 title: S.current.view_in_block_explorer,
101 value: _explorerDescription(type),
102 - onTap: () {
102 + onTap: () async {
103 try {
104 - launch(_explorerUrl(type, tx.id));
104 + final uri = Uri.parse(_explorerUrl(type, tx.id));
105 + if (await canLaunchUrl(uri)) await launchUrl(uri, mode: LaunchMode.externalApplication);
106 } catch (e) {}
107 }));
108
lib/view_model/unspent_coins/unspent_coins_details_view_model.dart
+1 -1
@@ -56,7 +56,7 @@ abstract class UnspentCoinsDetailsViewModelBase with Store {
56 onTap: () {
57 try {
58 final url = Uri.parse(_explorerUrl(_type, unspentCoinsItem.hash));
59 - return launchUrl(url);
59 + return launchUrl(url, mode: LaunchMode.externalApplication);
60 } catch (e) {}
61 },
62 ));