Les apps Flutter communiquent fréquemment avec des APIs — en effectuant des requêtes HTTP, en analysant JSON, et en gérant les réponses/erreurs. En utilisant les packages http ou dio, async/await, et l'analyse JSON, les réseaux sont une partie essentielle de la plupart des apps.
Effectuer des requêtes HTTP
import 'package:http/http.dart' as http;
// GET request
Future<List<User>> fetchUsers() async {
final response = await http.get(Uri.parse('https://api.example.com/users'));
if (response.statusCode == 200) {
final List data = jsonDecode(response.body); // parse JSON
return data.map((json) => User.fromJson(json)).toList();
} else {
throw Exception('Failed to load users'); // handle errors
}
}
// POST request
await http.post(
Uri.parse('https://api.example.com/users'),
headers: {'Content-Type': 'application/json'},
body: jsonEncode({'name': 'Ann'}),
);
Analyse JSON (sérialisation)
// model class with fromJson/toJson (convert between JSON and Dart objects)
class User {
final String name;
User(this.name);
factory User.fromJson(Map<String, dynamic> json) => User(json['name']);
Map<String, dynamic> toJson() => {'name': name};
}
// → for many models, use code generation (json_serializable) to avoid boilerplate
Bonnes pratiques
✓ Use a SERVICE/repository layer (separate networking from UI) — clean architecture
✓ Handle ERRORS (network failures, non-200 status, timeouts) gracefully → show UI feedback
✓ Show LOADING states (FutureBuilder / state management)
✓ Use DIO for advanced needs (interceptors, retries, better config) vs basic http
✓ Parse JSON into typed MODELS (not raw maps) — type safety
✓ Handle auth (tokens in headers), timeouts, and cancellation
Pourquoi c'est important
Comprendre les réseaux et les APIs dans Flutter est essentiel car la plupart des apps communiquent avec des backends — récupérer et envoyer des données via HTTP est une partie essentielle de presque toutes les apps réelles, donc c'est une connaissance pratique incontournable.
Les apps ont constamment besoin d'effectuer des appels API (charger des données, soumettre des formulaires, authentification), et comprendre comment faire cela correctement est fondamental.
Savoir comment effectuer des requêtes HTTP (GET, POST, etc. en utilisant les packages http ou dio avec async/await), analyser JSON (convertir les réponses API en objets de modèle Dart typés via fromJson/toJson, idéalement avec la génération de code pour de nombreux modèles), et gérer les réponses et erreurs (vérifier les codes de statut, lever/gérer les exceptions) est la compétence pratique fondamentale.
Comprendre les bonnes pratiques est particulièrement précieux : utiliser une couche de service/dépôt pour séparer les réseaux de l'interface utilisateur (architecture propre, maintenabilité), gérer les erreurs avec élégance (défaillances du réseau, statuts non-200, délais d'expiration — afficher les retours UI appropriés, puisque les appels réseau échouent couramment), afficher les états de chargement (via FutureBuilder ou gestion d'état, pour une bonne UX), analyser JSON en modèles typés (pour la sécurité des types plutôt que les maps brutes), et gérer l'authentification et les délais d'expiration — ceux-ci reflètent la construction d'un code réseau robuste et maintenable plutôt que des appels ad hoc fragiles.
Puisque la plupart des apps Flutter communiquent avec les APIs (un besoin pratiquement universel) et le faire bien (requêtes appropriées, analyse JSON en modèles, gestion des erreurs, états de chargement, et architecture propre) est essentiel pour des apps fonctionnelles et robustes, et puisque comprendre les outils et les bonnes pratiques est nécessaire pour cette capacité fondamentale, comprendre les réseaux et les APIs dans Flutter est une connaissance pratique essentielle et fréquemment appliquée — une compétence fondamentale nécessaire dans pratiquement toutes les apps Flutter réelles qui communiquent avec un backend, centrale à la construction d'apps qui récupèrent et affichent des données réelles de manière fiable.
