Aller au contenu

⬅️ Retour au sommaire Flutter

Annexe B — Aide-mémoire Dart / Flutter (Cheat Sheet)

Commandes CLI essentielles

Commande Effet
flutter doctor Diagnostique l’environnement
flutter create mon_app Crée un nouveau projet
flutter pub get Télécharge les dépendances (pubspec.yaml)
flutter pub add nom_du_package Ajoute une dépendance
flutter run Lance l’app sur l’appareil sélectionné
flutter devices Liste les appareils/émulateurs connectés
flutter test Exécute tous les tests
flutter build apk --release Génère un APK Android
flutter build appbundle --release Génère un App Bundle (Play Store)
flutter build ios --release Génère un build iOS (Mac requis)
flutter clean Nettoie le cache de build (à utiliser en cas de bug étrange)
flutter analyze Analyse statique du code (équivalent Checkstyle/SonarLint)

Dart — Syntaxe essentielle

// Variables
var x = 10; int y = 5; final z = 3; const pi = 3.14;
String? nullable;                       // peut être null
nullable ??= "valeur par défaut";       // assigne seulement si null

// Conditions & boucles
if (x > 5) { } else if (x == 5) { } else { }
for (var i = 0; i < 10; i++) { }
for (final item in liste) { }
while (condition) { }

// Fonctions
int addition(int a, int b) => a + b;                 // fonction fléchée
void fn({required String nom, int age = 18}) { }      // paramètres nommés
void fn2([String? optionnel]) { }                     // paramètre positionnel optionnel

// Collections
List<int> liste = [1, 2, 3];
Map<String, int> map = {"a": 1, "b": 2};
Set<int> set = {1, 2, 3};
liste.map((e) => e * 2).where((e) => e > 2).toList();

// Classes
class Animal {
  final String nom;
  Animal(this.nom);
  void crier() => print("$nom fait du bruit");
}
class Chien extends Animal {
  Chien(super.nom);
  @override
  void crier() => print("$nom aboie");
}

// Asynchrone
Future<String> recupererDonnee() async {
  await Future.delayed(const Duration(seconds: 1));
  return "Donnée";
}

Widgets les plus utilisés

Widget Usage
Text Afficher du texte
Icon Afficher une icône Material
Image.network / Image.asset Afficher une image
Container Boîte avec style (couleur, marge, bordure)
Row / Column Aligner des enfants horizontalement/verticalement
Stack Superposer des widgets
Expanded / Flexible Répartir l’espace dans un Row/Column
SizedBox Espacement fixe ou contrainte de taille
Padding Espace intérieur
ListView.builder Liste paresseuse (performances)
GridView.builder Grille paresseuse
Scaffold Structure de page Material (AppBar, body, FAB…)
AppBar Barre supérieure
Drawer Menu latéral
FloatingActionButton Bouton d’action flottant
ElevatedButton / TextButton / OutlinedButton Boutons
TextField / TextFormField Champ de saisie
Form Conteneur de validation de formulaire
Card Carte avec ombre
ListTile Ligne standard (icône + titre + sous-titre + trailing)
CircularProgressIndicator Indicateur de chargement
AlertDialog Boîte de dialogue modale
SnackBar Notification temporaire en bas d’écran
FutureBuilder Gérer un appel asynchrone (chargement/erreur/succès)
Consumer<T> Écouter un ChangeNotifier (Provider)

Provider — aide-mémoire

// Enregistrer
ChangeNotifierProvider(create: (_) => MonProvider(), child: ...)
MultiProvider(providers: [...], child: ...)

// Lire (dans build, se reconstruit sur notifyListeners)
context.watch<MonProvider>()

// Lire (dans un callback, sans abonnement)
context.read<MonProvider>()

// Reconstruire seulement une sous-partie de l'arbre
Consumer<MonProvider>(builder: (context, provider, child) => ...)
Navigator.push(context, MaterialPageRoute(builder: (_) => PageB()));
Navigator.pop(context);
Navigator.pop(context, valeurDeRetour);
Navigator.pushReplacement(context, MaterialPageRoute(builder: (_) => PageB()));
Navigator.pushNamed(context, '/route');

HTTP — aide-mémoire

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

final response = await http.get(Uri.parse(url));
final response = await http.post(Uri.parse(url), headers: {...}, body: jsonEncode({...}));
final response = await http.put(Uri.parse(url), headers: {...}, body: jsonEncode({...}));
final response = await http.delete(Uri.parse(url));

response.statusCode  // 200, 201, 204, 400, 401, 404, 500...
jsonDecode(response.body)
jsonEncode(monObjet.toJson())

Packages incontournables au-delà de ce cours

Package Usage
go_router Navigation déclarative avec deep-linking
riverpod Alternative moderne et testable à Provider
dio Client HTTP avancé (intercepteurs, annulation, retry)
freezed / json_serializable Génération de modèles immuables et JSON
flutter_bloc State management orienté événements (BLoC)
sqflite / drift Base de données SQL embarquée
hive / isar Base de données NoSQL embarquée rapide
cached_network_image Cache d’images réseau
flutter_launcher_icons Génération d’icônes d’application
intl Internationalisation, formatage de dates/nombres

⬅️ Retour au sommaire Flutter