redirectToAppRouteOrUrl function
Future<void>
redirectToAppRouteOrUrl(
- BuildContext context,
- String? target, {
- String? reference,
- AppTranslations? tr,
Redirige vers une route interne Flutter ou une URL externe selon la valeur.
Implementation
Future<void> redirectToAppRouteOrUrl(BuildContext context, String? target,
{String? reference, AppTranslations? tr}) async {
if (target == null || target.isEmpty) return;
final isRoute = target.startsWith('/') && !target.startsWith('http');
if (isRoute) {
Navigator.of(context).pushNamed(target, arguments: reference);
return;
}
final uri = Uri.tryParse(target);
if (uri != null && (uri.isScheme('http') || uri.isScheme('https'))) {
final separator = target.contains('?') ? '&' : '?';
final finalUrl = reference != null ? '$target${separator}reference=$reference' : target;
final launchUri = Uri.parse(finalUrl);
if (await canLaunchUrl(launchUri)) {
await launchUrl(launchUri, mode: LaunchMode.externalApplication);
} else {
ScaffoldMessenger.of(context).showSnackBar(
SnackBar(content: Text(tr?.unableToOpen ?? "Impossible d'ouvrir la redirection.")),
);
}
} else {
ScaffoldMessenger.of(context).showSnackBar(
SnackBar(content: Text(tr?.invalidRedirect ?? "Redirection invalide.")),
);
}
}