From e186dac39f03409597e53b30aa2fdf5f913ec9c1 Mon Sep 17 00:00:00 2001 From: Inex Code Date: Tue, 17 Jan 2023 16:23:26 +0300 Subject: [PATCH] fix(ui): Deduplicated launch_url functions Also fixed issue of calling URI with duplicate protocol Closes: #184 --- lib/ui/pages/services/service_page.dart | 16 ++-------------- lib/ui/pages/services/services.dart | 16 ++-------------- .../initializing/server_provider_picker.dart | 18 +++--------------- lib/utils/launch_url.dart | 13 +++++++++++++ 4 files changed, 20 insertions(+), 43 deletions(-) create mode 100644 lib/utils/launch_url.dart diff --git a/lib/ui/pages/services/service_page.dart b/lib/ui/pages/services/service_page.dart index d923a5b0..22db2bf6 100644 --- a/lib/ui/pages/services/service_page.dart +++ b/lib/ui/pages/services/service_page.dart @@ -9,8 +9,8 @@ import 'package:selfprivacy/logic/models/service.dart'; import 'package:selfprivacy/ui/components/brand_cards/filled_card.dart'; import 'package:selfprivacy/ui/components/brand_hero_screen/brand_hero_screen.dart'; import 'package:selfprivacy/ui/pages/server_storage/binds_migration/services_migration.dart'; +import 'package:selfprivacy/utils/launch_url.dart'; import 'package:selfprivacy/utils/route_transitions/basic.dart'; -import 'package:url_launcher/url_launcher.dart'; class ServicePage extends StatefulWidget { const ServicePage({required this.serviceId, super.key}); @@ -59,7 +59,7 @@ class _ServicePageState extends State { if (service.url != null) ListTile( iconColor: Theme.of(context).colorScheme.onBackground, - onTap: () => _launchURL(service.url), + onTap: () => launchURL(service.url), leading: const Icon(Icons.open_in_browser), title: Text( 'service_page.open_in_browser'.tr(), @@ -232,15 +232,3 @@ class ServiceStatusCard extends StatelessWidget { } } } - -void _launchURL(final url) async { - try { - final Uri uri = Uri.parse(url); - await launchUrl( - uri, - mode: LaunchMode.externalApplication, - ); - } catch (e) { - print(e); - } -} diff --git a/lib/ui/pages/services/services.dart b/lib/ui/pages/services/services.dart index 606fc9d7..54192367 100644 --- a/lib/ui/pages/services/services.dart +++ b/lib/ui/pages/services/services.dart @@ -12,9 +12,9 @@ import 'package:selfprivacy/ui/components/icon_status_mask/icon_status_mask.dart import 'package:selfprivacy/ui/components/not_ready_card/not_ready_card.dart'; import 'package:easy_localization/easy_localization.dart'; import 'package:selfprivacy/ui/pages/services/service_page.dart'; +import 'package:selfprivacy/utils/launch_url.dart'; import 'package:selfprivacy/utils/route_transitions/basic.dart'; import 'package:selfprivacy/utils/ui_helpers.dart'; -import 'package:url_launcher/url_launcher.dart'; class ServicesPage extends StatefulWidget { const ServicesPage({super.key}); @@ -23,18 +23,6 @@ class ServicesPage extends StatefulWidget { State createState() => _ServicesPageState(); } -void _launchURL(final url) async { - try { - final Uri uri = Uri.parse(url); - await launchUrl( - uri, - mode: LaunchMode.externalApplication, - ); - } catch (e) { - print(e); - } -} - class _ServicesPageState extends State { @override Widget build(final BuildContext context) { @@ -145,7 +133,7 @@ class _Card extends StatelessWidget { Column( children: [ GestureDetector( - onTap: () => _launchURL( + onTap: () => launchURL( service.url, ), child: Text( diff --git a/lib/ui/pages/setup/initializing/server_provider_picker.dart b/lib/ui/pages/setup/initializing/server_provider_picker.dart index 9775a945..48f2590e 100644 --- a/lib/ui/pages/setup/initializing/server_provider_picker.dart +++ b/lib/ui/pages/setup/initializing/server_provider_picker.dart @@ -12,7 +12,7 @@ import 'package:selfprivacy/ui/components/brand_button/outlined_button.dart'; import 'package:selfprivacy/ui/components/brand_cards/outlined_card.dart'; import 'package:selfprivacy/ui/components/brand_md/brand_md.dart'; import 'package:selfprivacy/ui/components/info_box/info_box.dart'; -import 'package:url_launcher/url_launcher.dart'; +import 'package:selfprivacy/utils/launch_url.dart'; class ServerProviderPicker extends StatefulWidget { const ServerProviderPicker({ @@ -249,7 +249,7 @@ class ProviderSelectionPage extends StatelessWidget { // Outlined button that will open website BrandOutlinedButton( onPressed: () => - _launchURL('https://www.hetzner.com/cloud'), + launchURL('https://www.hetzner.com/cloud'), title: 'initializing.select_provider_site_button'.tr(), ), ], @@ -323,7 +323,7 @@ class ProviderSelectionPage extends StatelessWidget { // Outlined button that will open website BrandOutlinedButton( onPressed: () => - _launchURL('https://www.digitalocean.com'), + launchURL('https://www.digitalocean.com'), title: 'initializing.select_provider_site_button'.tr(), ), ], @@ -336,15 +336,3 @@ class ProviderSelectionPage extends StatelessWidget { ), ); } - -void _launchURL(final url) async { - try { - final Uri uri = Uri.parse(url); - await launchUrl( - uri, - mode: LaunchMode.externalApplication, - ); - } catch (e) { - print(e); - } -} diff --git a/lib/utils/launch_url.dart b/lib/utils/launch_url.dart new file mode 100644 index 00000000..d7ccd0fa --- /dev/null +++ b/lib/utils/launch_url.dart @@ -0,0 +1,13 @@ +import 'package:url_launcher/url_launcher.dart'; + +void launchURL(final url) async { + try { + final Uri uri = Uri.parse(url); + await launchUrl( + uri, + mode: LaunchMode.externalApplication, + ); + } catch (e) { + print(e); + } +}