Installer le package Url launcher
La première chose à faire pour utiliser un package Flutter est de l’exporter. Deux options s’offrent donc à vous pour télécharger le package url_launcher dans sa dernière version (6.3.0) :
Utiliser le terminal de commande dans Visual Studio et entrer la commande :
- $ flutter pub add
url_launcher
; - Placer la dépendance
url_launcher: ^6.3.0
dans votre dossier pubspec.yaml.
Une fois cela fait, laissez le package se télécharger et ajoutez la ligne import ‘package:url_launcher/url_launcher.dart’; en haut de chaque document en .dart où vous souhaitez l’utiliser.
Configuration supplémentaire pour Android 12 et IOS 10
Une étape supplémentaire est requise pour que le package puisse fonctionner sur les versions d’Android 11 et supérieurs et IOS 9 et supérieures.
Pour Android, rendez-vous dans votre fichier AndroidManifest.xml et ajoutez ces lignes de code, juste au-dessus du tag de fermeture </manifest> :
<manifest xmlns:android="http://schemas.android.com/apk/res/android">
...
//CODE A AJOUTER
<queries>
<intent>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.BROWSABLE" />
<data android:scheme="https" />
</intent>
<intent>
<action android:name="android.intent.action.VIEW" />
<data android:scheme="https" />
</intent>
<intent>
<action android:name="android.intent.action.VIEW" />
<data android:scheme="tel" />
</intent>
</queries>
//FIN DU CODE
</manifest>
Pour IOS, rendez-vous dans votre fichier Info.plist et ajoutez ces lignes, juste au-dessus du tag </dict> de fermeture :
<plist version="1.0">
<dict>
...
//CODE A AJOUTER
<key>LSApplicationQueriesSchemes</key>
<array>
<string>sms</string>
<string>tel</string>
</array>
//FIN DU CODE
</dict>
</plist>
Utiliser le package Url Launcher
Une fois le package installé, Url launcher va vous permettre de réaliser les actions suivantes :
- Ouvrir des liens dans un moteur de recherche ;
- Créer un email dans votre boite de messagerie ;
- Lancer un appel depuis votre application d’appels ;
- Envoyer un SMS depuis votre application de messagerie ;
- Ouvrir des documents sauvegardés localement.
Ouvrir un Url
La première chose à faire pour ouvrir une URL avec le package Url launcher, est de la stocker au bon format dans une variable de type Uri.
Uri _monLien = Uri(
scheme: 'https',
path: 'pub.dev/packages/url_launcher',
),
Une fois cela fait, il ne vous reste plus qu’à utiliser la fonction launchUrl fournie par le package :
import 'package:flutter/material.dart';
import 'package:url_launcher/url_launcher.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(
title: Text('Lancer Url'),
),
body: Center(
child: CallButton(),
),
),
);
}
}
class CallButton extends StatelessWidget {
final Uri _monLien = Uri(
scheme: 'https',
path: 'pub.dev/packages/url_launcher', // Remplacez par le lien souhaité
);
@override
Widget build(BuildContext context) {
return ElevatedButton(
onPressed: () async {
try {
if (!await launchUrl(_monLien)) {
throw Exception('Could not launch $_monLien');
}
} catch (e) {
print(e.toString());
}
},
child: Text('Ouvrir la page'),
);
}
}
Envoyer un mail
La première chose à faire pour envoyer un mail avec le package Url launcher, est de la stocker au bon format dans une variable de type Uri et de créer une fonction pour formater votre mail.
String? encodeQueryParameters(Map<String, String> params) {
return params.entries
.map((MapEntry<String, String> e) =>
'${Uri.encodeComponent(e.key)}=${Uri.encodeComponent(e.value)}')
.join('&');
}
final Uri emailExemple = Uri(
scheme: 'mailto',
path: 'smith@example.com',
query: encodeQueryParameters(<String, String>{
'subject': 'Example Subject & Symbols are allowed!',
}));
Une fois cela fait, il ne vous reste plus qu’à utiliser la fonction launchUrl fournie par le package :
import 'package:flutter/material.dart';
import 'package:url_launcher/url_launcher.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(
title: Text("Envoi d'email"),
),
body: Center(
child: OpenUrlButton(),
),
),
);
}
}
String? encodeQueryParameters(Map<String, String> params) {
return params.entries
.map((MapEntry<String, String> e) =>
'${Uri.encodeComponent(e.key)}=${Uri.encodeComponent(e.value)}')
.join('&');
}
class OpenUrlButton extends StatelessWidget {
final Uri emailExemple = Uri(
scheme: 'mailto',
path: 'smith@example.com',
query: encodeQueryParameters(<String, String>{
'subject': 'Example Subject & Symbols are allowed!',
}));
@override
Widget build(BuildContext context) {
return ElevatedButton(
onPressed: () async {
try {
if (!await launchUrl(emailExemple)) {
throw Exception('Could not launch $emailExemple');
}
} catch (e) {
print(e.toString());
}
},
child: Text('Envoyer email'),
);
}
}
Appeler un numéro de téléphone
La première chose à faire pour appeler un numéro de téléphone avec le package Url launcher, est de le stocker au bon format dans une variable de type Uri.
final Uri launchCall = Uri(
scheme: 'tel',
path: '+33123456789',
);
Une fois cela fait, il ne vous reste plus qu’à utiliser la fonction launchUrl fournie par le package :
import 'package:flutter/material.dart';
import 'package:url_launcher/url_launcher.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(
title: Text("Appel"),
),
body: Center(
child: CallButton(),
),
),
);
}
}
String? encodeQueryParameters(Map<String, String> params) {
return params.entries
.map((MapEntry<String, String> e) =>
'${Uri.encodeComponent(e.key)}=${Uri.encodeComponent(e.value)}')
.join('&');
}
class CallButton extends StatelessWidget {
final Uri launchCall = Uri(
scheme: 'tel',
path: '+33123456789',
);
@override
Widget build(BuildContext context) {
return ElevatedButton(
onPressed: () async {
try {
if (!await launchUrl(launchCall)) {
throw Exception('Could not launch $launchCall');
}
} catch (e) {
print(e.toString());
}
},
child: Text('Appeler numéro'),
);
}
}
Envoyer un SMS
La première chose à faire pour envoyer des sms avec le package Url launcher, est de le stocker au bon format dans une variable de type Uri et de créer une fonction pour formater le contenu de votre SMS.
String? encodeQueryParameters(Map<String, String> params) {
return params.entries
.map((MapEntry<String, String> e) =>
'${Uri.encodeComponent(e.key)}=${Uri.encodeComponent(e.value)}')
.join('&');
}
final Uri launchSMS = Uri(
scheme: 'sms',
path: '+33123456789',
queryParameters: <String, String>{
'body': Uri.encodeComponent('Le message que je veux envoyer'),
},
);
Une fois cela fait, il ne vous reste plus qu’à utiliser la fonction launchUrl fournie par le package :
import 'package:flutter/material.dart';
import 'package:url_launcher/url_launcher.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(
title: Text("Envoi de SMS"),
),
body: Center(
child: SMSButton(),
),
),
);
}
}
String? encodeQueryParameters(Map<String, String> params) {
return params.entries
.map((MapEntry<String, String> e) =>
'${Uri.encodeComponent(e.key)}=${Uri.encodeComponent(e.value)}')
.join('&');
}
class SMSButton extends StatelessWidget {
final Uri launchSMS = Uri(
scheme: 'sms',
path: '+33123456789',
queryParameters: <String, String>{
'body': Uri.encodeComponent('Le message que je veux envoyer'),
},
);
@override
Widget build(BuildContext context) {
return ElevatedButton(
onPressed: () async {
try {
if (!await launchUrl(launchSMS)) {
throw Exception('Could not launch $launchSMS');
}
} catch (e) {
print(e.toString());
}
},
child: Text('Envoyer SMS'),
);
}
}
Ouvrir un dossier
La première chose à faire ouvrir un dossier sauvegardé localement avec le package Url launcher, est de le stocker au bon format dans une variable de type Uri.
final Uri openFile = Uri(
scheme: 'file',
path: 'mon_chemin/de_dossier',
);
Une fois cela fait, il ne vous reste plus qu’à utiliser la fonction launchUrl fournie par le package :
import 'package:flutter/material.dart';
import 'package:url_launcher/url_launcher.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(
title: Text("Dossier"),
),
body: Center(
child: OpenFile(),
),
),
);
}
}
class OpenFile extends StatelessWidget {
final Uri openFile = Uri(
scheme: 'file',
path: 'mon_chemin/de_dossier',
);
@override
Widget build(BuildContext context) {
return ElevatedButton(
onPressed: () async {
try {
if (!await launchUrl(openFile)) {
throw Exception('Could not launch $openFile');
}
} catch (e) {
print(e.toString());
}
},
child: Text('Ouvrir dossier'),
);
}
}