url_launcher 6.0.4 url_launcher: ^6.0.4 copied to clipboard
Flutter plugin for launching a URL. Supports web, phone, SMS, and email schemes.
url_launcher #
A Flutter plugin for launching a URL. Supports iOS, Android, web, Windows, macOS, and Linux.
Usage #
To use this plugin, add url_launcher
as a dependency in your pubspec.yaml file.
Installation #
iOS #
Add any URL schemes passed to canLaunch
as LSApplicationQueriesSchemes
entries in your Info.plist file.
Example:
<key>LSApplicationQueriesSchemes</key>
<array>
<string>https</string>
<string>http</string>
</array>
See -[UIApplication canOpenURL:]
for more details.
Example #
import 'package:flutter/material.dart';
import 'package:url_launcher/url_launcher.dart';
const _url = 'https://flutter.dev';
void main() => runApp(
const MaterialApp(
home: Material(
child: Center(
child: RaisedButton(
onPressed: _launchURL,
child: Text('Show Flutter homepage'),
),
),
),
),
);
void _launchURL() async =>
await canLaunch(_url) ? await launch(_url) : throw 'Could not launch $_url';
Supported URL schemes #
The launch
method
takes a string argument containing a URL. This URL
can be formatted using a number of different URL schemes. The supported
URL schemes depend on the underlying platform and installed apps.
Common schemes supported by both iOS and Android:
Scheme | Action |
---|---|
http:<URL> , https:<URL> , e.g. http://flutter.dev |
Open URL in the default browser |
mailto:<email address>?subject=<subject>&body=<body> , e.g. mailto:[email protected]?subject=News&body=New%20plugin |
Create email to |
tel:<phone number> , e.g. tel:+1 555 010 999 |
Make a phone call to |
sms:<phone number> , e.g. sms:5550101234 |
Send an SMS message to |
More details can be found here for iOS and Android
Note: URL schemes are only supported if there are apps installed on the device that can
support them. For example, iOS simulators don't have a default email or phone
apps installed, so can't open tel:
or mailto:
links.
Encoding URLs #
URLs must be properly encoded, especially when including spaces or other special characters. This can be done using the Uri
class:
import 'dart:core';
import 'package:url_launcher/url_launcher.dart';
final Uri _emailLaunchUri = Uri(
scheme: 'mailto',
path: '[email protected]',
queryParameters: {
'subject': 'Example Subject & Symbols are allowed!'
}
);
// ...
// mailto:[email protected]?subject=Example+Subject+%26+Symbols+are+allowed%21
launch(_emailLaunchUri.toString());
Handling missing URL receivers #
A particular mobile device may not be able to receive all supported URL schemes.
For example, a tablet may not have a cellular radio and thus no support for
launching a URL using the sms
scheme, or a device may not have an email app
and thus no support for launching a URL using the email
scheme.
We recommend checking which URL schemes are supported using the
canLaunch
method prior to calling launch
. If the canLaunch
method returns false, as a
best practice we suggest adjusting the application UI so that the unsupported
URL is never triggered; for example, if the email
scheme is not supported, a
UI button that would have sent email can be changed to redirect the user to a
web page using a URL following the http
scheme.
Browser vs In-app Handling #
By default, Android opens up a browser when handling URLs. You can pass
forceWebView: true
parameter to tell the plugin to open a WebView instead.
If you do this for a URL of a page containing JavaScript, make sure to pass in
enableJavaScript: true
, or else the launch method will not work properly. On
iOS, the default behavior is to open all web URLs within the app. Everything
else is redirected to the app handler.