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
));