import 'package:flutter/material.dart'; import 'package:url_launcher/url_launcher.dart'; import '../l10n/l10n.dart'; class LinkHandler { static Future handleLinkTap(BuildContext context, String url) async { // Show confirmation dialog final shouldOpen = await showDialog( context: context, builder: (context) => AlertDialog( title: Text(context.l10n.chat_openLink), content: Column( mainAxisSize: MainAxisSize.min, crossAxisAlignment: CrossAxisAlignment.start, children: [ Text( context.l10n.chat_openLinkConfirmation, style: const TextStyle(fontSize: 14), ), const SizedBox(height: 16), Container( padding: const EdgeInsets.all(12), decoration: BoxDecoration( color: Theme.of(context).colorScheme.surfaceContainerHighest, borderRadius: BorderRadius.circular(8), ), child: SelectableText( url, style: const TextStyle(fontSize: 12, fontFamily: 'monospace'), ), ), ], ), actions: [ TextButton( onPressed: () => Navigator.pop(context, false), child: Text(context.l10n.common_cancel), ), FilledButton( onPressed: () => Navigator.pop(context, true), child: Text(context.l10n.chat_open), ), ], ), ); if (shouldOpen != true) return; // Launch URL try { final uri = Uri.parse(url); if (!await launchUrl(uri, mode: LaunchMode.externalApplication)) { if (context.mounted) { ScaffoldMessenger.of(context).showSnackBar( SnackBar( content: Text(context.l10n.chat_couldNotOpenLink(url)), backgroundColor: Colors.red, ), ); } } } catch (e) { if (context.mounted) { ScaffoldMessenger.of(context).showSnackBar( SnackBar( content: Text(context.l10n.chat_invalidLink), backgroundColor: Colors.red, ), ); } } } }