import 'package:flutter/material.dart'; import 'package:flutter/services.dart' show Clipboard, ClipboardData; import 'package:url_launcher/url_launcher.dart'; import '../utils/helper_dialogs.dart'; class ExternalLinkWidget extends StatelessWidget { final String url; final BuildContext context; const ExternalLinkWidget( {required this.url, required this.context, super.key}); Future _onTap() async { bool? confirm = await showConfirmationDialog( context, 'External Link', 'You are about to open an external link. ' 'Please make sure you trust the link before proceeding.\n' '$url\n' 'Do you want to open this external link?\n\n' 'Hint: Long press to copy the link to your clipboard instead of opening it.', ); if (confirm == true) { Uri weblink = Uri.parse(url); if (!await launchUrl(weblink)) { if (context.mounted) { showErrorSnackBar(context, 'Could not launch $weblink'); } } } } void _onLongPress() { _copyToClipboard(context, url); } void _copyToClipboard(BuildContext context, String text) { Clipboard.setData(ClipboardData(text: text)).then((_) { ScaffoldMessenger.of(context).showSnackBar( SnackBar(content: Text('Copied $text to clipboard')), ); }); } @override Widget build(BuildContext context) { return GestureDetector( onTap: _onTap, onLongPress: _onLongPress, child: Text( url, textAlign: TextAlign.center, overflow: TextOverflow.ellipsis, style: const TextStyle(color: Colors.blue), ), ); } }