URL: https://pub.dev/packages/url_launcher
Supported Platforms: Android, iOS, Linux, macOS, Web, Windows
Popularity: 5,655 ❤
No app without a web link!
The URL-launcher package makes it easy for you to open external links. This includes website URLs, as well as email, phone, and SMS links. They will then be executed by your smartphone (or other electronic devices) in the corresponding app.
URL Launcher async functions
The URL Launcher plugin provides two asynchronous functions: canLaunch and launch. The canLaunch function returns a boolean value that indicates whether or not a device can handle a certain URL scheme. For example, if a device does not have an email app installed, it will be unable to launch a URL using the mailto scheme.
The launch function, on the other hand, requires a String as an argument that serves as the URL; it parses the given URL string and passes it to the underlying platform for processing. The launch function also has other named optional parameters that can be used to change specific settings on both Android and iOS platforms, some of which are as follows:
- Android-only settings:
forceWebView– If set tonullorfalse, the URL is opened in the device’s default browser; otherwise, the URL is launched in a WebViewenableJavaScript– If set totrue, JavaScript is enabled in WebViewenableDomStorage– When the value is set totrue, WebView enables DOM storage
- iOS-only settings:
forceSafariVC– If set totrue, it opens the URL in the Safari View Controller; otherwise, it uses the device’s default handlerstatusBarBrightness– collects an enum value which can be eitherBrightness.darkorBrightness.lightto set the status bar brightness of the application after opening a link on iOS devices
Now that we understand how the URL Launcher plugin works and what it provides, let’s look at some examples of how we can implement it in our application.
Launching a webpage with URL Launcher
The code below is quite self-explanatory; notice that we use the canLaunch function to check whether the device can launch a particular URL scheme before invoking the launch function.
TextButton(
onPressed: () async {
const url = 'https://flutterfever.com';
if(await canLaunch(url)){
await launch(url);
}else {
throw 'Could not launch $url';
}
},
child: const CustomWidget(
icon: Icons.language,
label: 'Open a URL',
),
),
Run the code on your device and tap the Open a URL card in our original UI to launch the webpage.
Launching maps with url launcher
To view a location on a map, we need to pass the location’s latitude and longitude values to the mapUrl along with the geo: URL scheme.
TextButton(
onPressed: () async {
const String lat = "42.3540";
const String lng = "71.0586";
const String mapUrl = "geo:$lat,$lng";
if (await canLaunch(mapUrl)) {
await launch(mapUrl);
} else {
throw "Couldn't launch Map";
}
},
child: const CustomWidget(
icon: Icons.near_me,
label: 'Check location',
),
),
Launching a mail app with url launcher
To send an email, we need to pass in the recipient’s email address, a subject line, the body of our email, and the mailto: URL scheme to the emailUrl widget in addition to the mailto: URL scheme. See below:
TextButton(
onPressed: () async {
String email = 'this.is.tijani@gmail.com';
String subject = 'This is a test email';
String body = 'This is a test email body';
String emailUrl = "mailto:$email?subject=$subject&body=$body";
if (await canLaunch(emailUrl)) {
await launch(emailUrl);
} else {
throw "Error occured sending an email";
}
},
child: const CustomWidget(
icon: Icons.forward_to_inbox,
label: 'Send an email',
Launching a text message app with url launcher
To send an SMS message, we use the sms: URL scheme and a similar implementation as above.
TextButton(
onPressed: () async {
String telephoneNumber = '+2347012345678';
String smsUrl = "sms:$telephoneNumber";
if (await canLaunch(smsUrl)) {
await launch(smsUrl);
} else {
throw "Error occured trying to send a message that number.";
}
child: const CustomWidget(
icon: Icons.textsms,
label: 'Send an SMS',
)