Introduction aux variables de type Uri dans Flutter


Avatar de Pierre Courtois

La classe Uri dans Flutter est un outil puissant et flexible pour gérer des pages web, des appels ou d’autres ressources. Dans cet article, nous explorerons les différents types d’URIs, leurs utilisations et les méthodes pratiques pour les manipuler.


schéma d'une moto

À 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 :

Avatar de Pierre Courtois