diff --git a/lib/ui/pages/services/services.dart b/lib/ui/pages/services/services.dart index c4226250..2c55ffed 100644 --- a/lib/ui/pages/services/services.dart +++ b/lib/ui/pages/services/services.dart @@ -19,7 +19,6 @@ import 'package:easy_localization/easy_localization.dart'; import 'package:selfprivacy/ui/pages/services/service_page.dart'; import 'package:selfprivacy/utils/route_transitions/basic.dart'; import 'package:selfprivacy/utils/ui_helpers.dart'; -import 'package:url_launcher/url_launcher.dart'; const switchableServices = [ 'bitwarden', @@ -36,18 +35,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) { @@ -181,7 +168,8 @@ class _Card extends StatelessWidget { Column( children: [ GestureDetector( - onTap: () => _launchURL( + onTap: () async => + UiHelpers.launchExternalApplicationURL( 'https://${service.url}', ), child: Text( diff --git a/lib/utils/ui_helpers.dart b/lib/utils/ui_helpers.dart index f4d58a05..4ced2184 100644 --- a/lib/utils/ui_helpers.dart +++ b/lib/utils/ui_helpers.dart @@ -1,8 +1,27 @@ import 'package:selfprivacy/logic/cubit/server_installation/server_installation_cubit.dart'; +import 'package:url_launcher/url_launcher.dart'; /// it's ui helpers use only for ui components, don't use for logic components. class UiHelpers { static String getDomainName(final ServerInstallationState config) => config.isDomainSelected ? config.serverDomain!.domainName : 'example.com'; + + static Future launchExternalApplicationURL(final url) async { + bool launched = false; + + try { + final Uri uri = Uri.parse(url); + if (await canLaunchUrl(uri)) { + launched = await launchUrl( + uri, + mode: LaunchMode.externalApplication, + ); + } + } catch (e) { + print(e); + } + + return launched; + } }