À quoi sert la classe Uri dans Flutter ?
En Dart la variable Uri, est une abstraction pour les Uniform Resource Identifiers (URIs). Une URI est une chaîne de caractères qui identifie une ressource sur un réseau, qu’il s’agisse de pages web, de fichiers ou de services. Elles peuvent être de deux types principaux : les URLs (Uniform Resource Locators) et les URNs (Uniform Resource Names).
Cette donc via cette classe que vous allez pouvoir accéder à des ressources externes à votre application, comme des pages webs, des numéros de téléphones, etc.
Comment se compose une Uri ?
Une URI est composée de plusieurs parties, dont certaines ne sont pas obligatoires :
- Scheme (schéma) : Indique le protocole à utiliser (ex. http, https, ftp, file).
- Authority (autorité) : Composée de l’hôte (par exemple, un nom de domaine) et du port.
- Path (chemin) : Indique la ressource spécifique à accéder.
- Query (requête) : Contient des paramètres supplémentaires sous forme de paires clé-valeur.
- Fragment (fragment) : Référence une sous-section de la ressource.
Par exemple, un URI pourrait prendre cette forme :
void main() {
// Créer une URI à partir d'une chaîne
var uri = Uri.parse('https://www.example.com:8080/path/to/resource?query=flutter#section1');
// Afficher les différentes parties de l'URI
print('Scheme: ${uri.scheme}'); // https
print('Host: ${uri.host}'); // www.example.com
print('Port: ${uri.port}'); // 8080
print('Path: ${uri.path}'); // /path/to/resource
print('Query: ${uri.query}'); // query=flutter
print('Fragment: ${uri.fragment}'); // section1
}
Les différents types d’URIs dans Flutter
Différents types de ressources sont soutenus par la classe URI, voici donc lesquelles et comment les manipuler.
URIs HTTP et HTTPS
La méthode Uri.https (ou http) va vous permettre d’accéder à des ressources de type page web via les protocoles HTTP ou HTTPS.
Les paramètres pris en charge par cette méthode sont :
- Schéma : http ou https
- Hôte : Nom de domaine ou adresse IP
- Port (optionnel) : Numéro de port pour la connexion
- Chemin (optionnel) : Chemin de la ressource sur le serveur
- Query Parameters (optionnel) : Paires clé-valeur pour transmettre des données supplémentaires
Voici un exemple d’URI de type HTTPS :
void main() {
// URI HTTPS
var uri = Uri.https('www.example.com', '/path/to/resource', {'query': 'flutter'});
// Afficher les différentes parties de l'URI
print('Scheme: ${uri.scheme}'); // https
print('Host: ${uri.host}'); // www.example.com
print('Path: ${uri.path}'); // /path/to/resource
print('Query: ${uri.query}'); // query=flutter
}
URIs de Fichier
La méthode Uri.file va vous permettre d’accéder à des fichiers locaux stockés sur votre appareil, en passant par leur chemin absolu dans le système de fichiers local.
Les paramètres pris en charge par cette méthode sont :
- Schéma : file
- Chemin : Chemin absolu du fichier sur le système de fichiers local
Voici un exemple d’URI de file :
void main() {
// URI de fichier
var uri = Uri.file('/path/to/local/file.txt');
// Afficher les différentes parties de l'URI
print('Scheme: ${uri.scheme}'); // file
print('Path: ${uri.path}'); // /path/to/local/file.txt
}
URIs de téléphone
La classe Uri vous permet également de stocker des numéros de téléphones qui peuvent ensuite être utilisés pour lancer des appels. Vous devrez pour cela utiliser la méthode Uri.parse.
Les paramètres pris en charge par cette méthode sont :
- Schéma : tel
- Chemin : Numéro de téléphone
Voici un exemple d’URI de tel :
void main() {
// URI de téléphone
var uri = Uri.parse('tel:+1234567890');
// Afficher les différentes parties de l'URI
print('Scheme: ${uri.scheme}'); // tel
print('Path: ${uri.path}'); // +1234567890
}
URIs de Mailto
La classe Uri peut également servir à stocker les informations d’un mail prérempli, que vous allez pouvoir utiliser dans une application de messagerie.
Les paramètres pris en charge par cette méthode sont :
- Schéma : mailto
- Chemin : Adresse email
- Query Parameters (optionnel) : Paires clé-valeur pour préremplir le sujet, le corps, etc.
Voici un exemple d’URI de mailto :
void main() {
// URI de mailto
var uri = Uri(
scheme: 'mailto',
path: 'example@example.com',
queryParameters: {
'subject': 'Hello',
'body': 'How are you?'
}
);
// Afficher les différentes parties de l'URI
print('Scheme: ${uri.scheme}'); // mailto
print('Path: ${uri.path}'); // example@example.com
print('Query: ${uri.query}'); // subject=Hello&body=How+are+you%3F
}
URIs de données
Enfin, la classe URI suivie de la méthode dataFromString(), vous permet de stocker des données encodées, par exemple pour retrouver des images ou bien des fichiers.
Les paramètres pris en charge par cette méthode sont :
- Schéma : data
- MIME Type : Type MIME des données
- Encodage (optionnel) : Encodage des données (base64)
- Données : Données encodées
Voici un exemple d’URI de données :
void main() {
// URI de données encodées
var uri = Uri.dataFromString(
'Hello, Flutter!',
mimeType: 'text/plain',
encoding: Encoding.getByName('utf-8')
);
// Afficher les différentes parties de l'URI
print('Scheme: ${uri.scheme}'); // data
print('Content: ${uri.data}'); // Data: text/plain;base64,SGVsbG8sIEZsdXR0ZXIh
}
Méthodes utiles associées aux URIs
Je vous présente ici, quelques méthodes que vous pouvez utiliser avec les URIs, qui peuvent vous être utiles dans vos projets Flutter.
toString()
La méthode .toString() est bien connu et permet de convertir votre Uri en chaîne de caractères complète. Cela peut vous être utile si vous devez par exemple l’afficher dans un texte.
void main() {
var uri = Uri.https('www.example.com', '/path/to/resource', {'query': 'flutter'});
print(uri.toString()); // https://www.example.com/path/to/resource?query=flutter
}-
toFilePath()
La méthode .toFilePath() convertit une URI de fichier en un chemin de fichier local. Elle est utile lorsque vous travaillez avec des URIs de fichiers et que vous avez besoin d’obtenir le chemin du fichier sur le système de fichiers local.
void main() {
// URI de fichier avec des caractères spéciaux
var uri = Uri.parse('file:///C:/path%20with%20spaces/file.txt');
print(uri.toFilePath(windows: true)); // C:\path with spaces\file.txt
}
replace()
La méthode .replace() vous permet de créer une nouvelle instance d’une Uri, en remplaçant une partie de celle-ci. Vous pouvez ainsi pour modifier des paramètres ou d’autres parties spécifiques d’une URI sans avoir à la recréer complètement.
void main() {
var uri = Uri.https('www.example.com', '/path/to/resource', {'query': 'flutter'});
var newUri = uri.replace(queryParameters: {'query': 'dart'});
print(newUri.toString()); // https://www.example.com/path/to/resource?query=dart
}
resolve()
La méthode .resolve() vous permet de créer une URI relative en partant d’une URI de base. Cela peut être pratique pour créer plusieurs variantes à partir d’une même racine.
void main() {
var baseUri = Uri.https('www.example.com', '/path/to/');
var relativeUri = Uri.parse('resource?query=flutter');
var resolvedUri = baseUri.resolveUri(relativeUri);
print(resolvedUri.toString()); // https://www.example.com/path/to/resource?query=flutter
}
Conclusion
Maintenant que vous connaissez les variables les plus utilisées avec Flutter, et comment les déclarer, la suite va être de pouvoir les manipuler et les modifier grâce à des opérateurs :