1. Réalisation d’appels réseau asynchrones en Flutter

La communication avec un serveur d’API REST distant s’effectue au moyen du package officiel http. Les opérations de lecture réseau retournent des Future<http.Response> traitées élégamment avec la syntaxe async / await :

import 'dart:convert';
import 'package:http/http.dart' as http;

Future<List<CoursMobile>> fetchCatalogueEnLigne() async {
    final uri = Uri.parse('https://api.ecole-informatique.ch/v1/cours-mobiles');
    final response = await http.get(uri);

    if (response.statusCode == 200) {
        final List<dynamic> corpsListe = jsonDecode(response.body);
        return corpsListe.map((item) => CoursMobile.fromJson(item)).toList();
    } else {
        throw Exception('Échec de communication : code HTTP ${response.statusCode}');
    }
}

2. Rendu asynchrone élégant avec FutureBuilder

Le widget natif FutureBuilder<T> écoute automatiquement l’évolution d’une tâche asynchrone et adapte l’interface selon son statut : spinner rotatif pendant le chargement (ConnectionState.waiting), affichage des données en cas de succès, ou message d’erreur si la promesse échoue.

3. Typage strict et désérialisation sécurisée

Ne manipulez jamais de données JSON brutes non typées dans vos widgets. Créez des classes de modèles de données immuables dotées de constructeurs fromJson rigoureusement typés.

Synthèse pédagogique : Anticipez systématiquement le mode hors-ligne : une application mobile qui plante dès que l’utilisateur entre dans un tunnel ferroviaire suisse dégrade immédiatement sa note sur les stores.