Если вы хоть раз думали о том, как открывать ссылки на Flutter, то точно видели пакет url_launcher. Но знаете ли вы, что его возможности этим не ограничиваются?
С помощью этого плагина можно:
✔️ Открывать URL-ссылки во внешнем браузере или прямо внутри приложения
✔️ Запускать почтовый клиент с уже заполненным письмом
✔️ Совершать звонки прямо из приложения
✔️ Открывать мессенджеры и другие приложения с поддержкой кастомных URL-схем
url_launcher – это плагин Flutter, предназначенный для взаимодействия с внешними приложениями с помощью стандартных URL-схем:
tel:, mailto:, https:, sms: и других.➡️ Совершаем звонок при помощи url_launcher
Future<void> launchCall({required String phoneNumber}) async {
final Uri url = Uri.parse('tel:$phoneNumber');
if (await canLaunchUrl(url)) {
await launchUrl(url);
} else {
throw 'Не удалось запустить вызов на: $phoneNumber';
}
}➡️Отправляем e-mail
Future<void> launchEmail({required String email}) async {
final Uri url = Uri.parse('mailto:$email');
if (await canLaunchUrl(url)) {
await launchUrl(url);
} else {
throw 'Не удалось открыть почтовый клиент для: $email';
}
}➡️Открываем сайт
Future<void> launchWeb({required String url}) async {
final Uri uri = Uri.parse(url);
if (await canLaunchUrl(uri)) {
await launchUrl(uri, mode: LaunchMode.externalApplication);
} else {
throw 'Не удалось открыть ссылку: $url';
}
}Но при подключении пакета не забываем о настройках Info.plist (iOS) и AndroidManifest.xml (Android), иначе canLaunchUrl может возвращать false.
Подробнее — в документации пакета.
⌛Если вы нацелены на веб-платформу, стоит помнить:
— Ссылки можно открывать только в ответ на действие пользователя
— Все ссылки открываются во внешнем браузере
— Некоторые LaunchMode не поддерживаются и игнорируются
Основные методы пакета:
🔵 canLaunchUrl(Uri) — проверяет, может ли система обработать URL
🔵 launchUrl(Uri, {LaunchMode, ...}) — открывает указанный URL
🔵 launchUrlString(String urlString, {LaunchMode, ...}) — альтернатива, если не хочется вручную парсить Uri
🔵 LaunchMode — перечисление, управляющее способом
🔵 platformDefault — по умолчанию (решает сама платформа)
🔵inAppWebView — открытие во встроенном WebView
🔵inAppBrowserView — встроенный браузер (Chrome Custom Tabs / Safari VC)
🔵externalApplication — открытие во внешнем приложении
🔵 externalNonBrowserApplication — открытие во внешнем не браузерном приложении
💡Но и, конечно, не забываем:
— Проверять URL через canLaunchUrl, чтобы избежать ошибок
— Использовать Uri.parse() вместо обычной строки — это безопаснее и надежнее
— Тестировать поведение на разных платформах (iOS, Android, Web) — оно может отличаться
На этом все! Наши ссылки все активны!🔗
