Flutter — concepts clés, architecture et widgets

Auteur : IT Sectr Publié le : 2026-05-01 Temps de lecture : 8 min

Flutter est un framework open-source de Google pour créer des applications multiplateformes à partir d’une base de code unique en utilisant le langage Dart. Selon Flutter Documentation, 2024, le framework compile en code natif pour iOS, Android, Web, Windows, macOS et Linux, offrant un comportement UI cohérent sur toutes les plateformes sans utiliser WebView ni pont JavaScript.

Points clés

  • Flutter est un framework Google pour le développement multiplateforme utilisant le langage Dart
  • Au cœur de l’architecture se trouvent les widgets : tous les éléments d’interface sont des objets Widget immuables
  • Flutter utilise son propre moteur de rendu Impeller (auparavant Skia), éliminant les dépendances aux composants natifs UI
  • Hot Reload permet de voir les modifications de code en millisecondes
  • Prend en charge 6 plateformes : iOS, Android, Web, Windows, macOS, Linux

Qu’est-ce que Flutter

Flutter est un SDK (kit de développement logiciel) et framework pour créer des interfaces utilisateur, annoncé par Google en 2015. La première version stable Flutter 1.0 est sortie en décembre 2018. Contrairement à React Native, Flutter n’utilise pas de pont entre JavaScript et le code natif — il compile directement en instructions natives du processeur.

La caractéristique clé de Flutter est son propre moteur de rendu. Le framework ne dépend ni d’UIKit (iOS) ni du système View d’Android. Au lieu de cela, Flutter dessine chaque pixel de manière indépendante via Skia (avant 2024) ou le nouveau moteur Impeller. Cela garantit une apparence cohérente sur toutes les plateformes et élimine les problèmes d’adaptation entre différentes versions d’OS.

Selon Statista 2024, Flutter se classe premier parmi les frameworks multiplateformes en popularité : environ 46 % des développeurs l’utilisent pour le développement mobile. Le framework est utilisé dans les projets de Google Pay, Alibaba, eBay, BMW et Tencent.

Histoire et versions de Flutter

La première version alpha de Flutter a été présentée au Dart Developer Summit en 2015 sous le nom Sky. En 2018, Flutter 1.0 est sorti avec le soutien uniquement pour iOS et Android. Flutter 2.0 (2021) a ajouté le support Web et Desktop. Flutter 3.0 (2022) a introduit le support stable pour macOS et Linux. Flutter 3.16 (2023) a présenté Impeller — un nouveau moteur de rendu basé sur Metal et Vulkan.

Flutter 3.22 (2024) inclut Impeller par défaut sur iOS, un support amélioré de Material Design 3, Dart 3.4 avec des extensions de macros et un support intégré de Native Assets pour un accès direct aux ressources de la plateforme. Google rapporte qu’Impeller réduit les saccades d’images de 90 % par rapport à Skia.

Le langage Dart

Dart est un langage de programmation créé par Google en 2011 et utilisé dans Flutter. Dart combine un typage strict avec des capacités de compilation JIT (pour Hot Reload) et de compilation AOT (pour les builds de production). Dart 3.0 (2023) a introduit le pattern matching, les classes scellées et les records comme fonctionnalités stables.

Null safety dans Dart est une fonctionnalité obligatoire introduite depuis la version 2.12. Le compilateur vérifie tous les types nullables au moment de la compilation, éliminant NullPointerException au moment de l’exécution. Les types de données (int, String, bool) sont non nullables par défaut, et les valeurs nullables utilisent le suffixe ? (par exemple, String? name).

Architecture de Flutter

L’architecture de Flutter est construite sur un principe à trois couches. La couche inférieure est le moteur (C/C++), responsable du rendu, des E/S et de l’accès aux API de la plateforme. La couche intermédiaire est le framework (Dart), qui implémente le système de widgets, les gestes, les animations et la navigation. La couche supérieure est l’application (Dart), qui assemble les widgets en un arbre.

Widgets et arbre de widgets

Dans Flutter, tout est un widget. Les widgets sont de deux types : StatelessWidget (immuable, ne stocke pas d’état) et StatefulWidget (muable, gère l’état via State). L’arbre de widgets (Widget Tree) est une structure hiérarchique où chaque widget enfant est imbriqué dans un parent. Scaffold, AppBar, Container, Text, Column, Row — ce sont les blocs de construction de base.

BuildContext est un objet qui communique la position du widget dans l’arbre. MediaQuery.of(context) obtient les dimensions de l’écran, Theme.of(context) obtient le thème actuel. BuildContext est utilisé pour la navigation (Navigator.of(context)), l’accès à InheritedWidget et la traduction de locale via Localizations.of.

Le moteur Impeller

Impeller est le moteur de rendu moderne de Flutter, écrit en C++ et utilisant Metal (iOS/macOS) et Vulkan (Android). Contrairement à Skia, qui redessinait chaque image de zéro, Impeller compile les shaders à l’avance et les stocke dans un cache. Cela élimine les retards lors du rendu initial de scènes complexes et réduit la charge du GPU.

Les tests de l’équipe Google Flutter montrent qu’Impeller réduit le temps de compilation des shaders de 200–500 ms (Skia) à 1–3 ms. Sur iPhone 13 Pro, le rendu par impulsion d’Impeller atteint 120 FPS sans chute d’images. Sur Android avec Vulkan, il offre 60 FPS stables même sur les appareils de milieu de gamme (Xiaomi Redmi Note 12).

Exemple d’application Flutter

dart
import 'package:flutter/material.dart';

void main() {
  runApp(const MyApp());
}

class MyApp extends StatelessWidget {
  const MyApp({super.key});

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(title: const Text('Application Flutter')),
        body: const Center(
          child: Text('Bonjour, Flutter !'),
        ),
      ),
    );
  }
}

Avantages de Flutter

Base de code unique — le principal avantage de Flutter. Un projet Dart compile pour iOS, Android, Web, Windows, macOS et Linux. Selon Google, cela réduit le temps de développement de 30 à 50 % par rapport à des projets iOS et Android séparés. Alibaba a réduit le temps de sortie de version de 30 % après être passé à Flutter.

Performance de Flutter est proche du natif. La compilation AOT de Dart en code machine ARM et x86_64 élimine les retards d’interprétation. Le moteur Impeller garantit 60 FPS même sur les appareils de 2018 (iPhone XR, Samsung Galaxy S9). Selon Google, 99,5 % des images dans les applications Flutter sont rendues sans saccade.

Hot Reload — technologie de mise à jour instantanée du code. Le développeur modifie le code source, sauvegarde le fichier, et Flutter reconstruit l’arbre de widgets en 300–800 ms sans perdre l’état actuel de l’application. Cela accélère les itérations de conception UI : les marges, couleurs et animations peuvent être modifiées en secondes sans attendre une reconstruction complète.

Material Design 3 et le langage de conception natif Cupertino (style iOS) sont inclus dans le paquet standard de Flutter. Les widgets Material 3 prennent en charge les couleurs dynamiques (Material You), la mise en page adaptative et les animations de transition d’écran. CupertinoPageTransition et CupertinoNavigationBar imitent le comportement du navigateur natif iOS.

Personnalisation des widgets ne nécessite pas de créer des vues personnalisées sur chaque plateforme. Il suffit de remplacer build() et de retourner un nouveau widget. Les paquets d’animation (AnimatedContainer, Hero, TweenAnimationBuilder) et de gestes (GestureDetector, Dismissible) couvrent 95 % des scénarios d’animation UI sans écrire de code de plateforme.

Écosystème et paquets de Flutter

pub.dev est le registre officiel de paquets pour Dart et Flutter. En juillet 2024, plus de 45 000 paquets sont publiés dans le registre. L’installation d’un paquet se fait avec la commande flutter pub add <nom_du_paquet>. Pub résout automatiquement les dépendances, vérifie la compatibilité des versions et génère pubspec.lock.

La gestion d’état dans Flutter est l’un des principaux défis architecturaux. Outre flutter_bloc, les solutions populaires incluent : Provider (recommandé par Google, utilise InheritedWidget), Riverpod (une version repensée de Provider avec sécurité à la compilation) et GetX (tout-en-un : état, routage, DI). Provider reste le plus simple pour débuter : ChangeNotifierProvider enveloppe le modèle, et Consumer reconstruit le widget lors du changement de données.

Les tests dans Flutter sont pris en charge à trois niveaux. Les tests unitaires (flutter test) vérifient les fonctions et classes sans UI. Les tests de widgets (testWidgets) rendent des widgets individuels dans un environnement isolé. Les tests d’intégration (IntegrationTest) exécutent l’application complète sur un appareil ou simulateur. Flutter 3.22 a ajouté la prise en charge des tests de patch via l’analyse de patch et des rapports améliorés de couverture de code.

Paquets populaires

dio est un client HTTP avec prise en charge des intercepteurs, timeouts et FormData. Utilisé dans 40 % des projets Flutter sur GitHub. Dio prend en charge l’interception de requêtes pour la journalisation, les tentatives et l’ajout de jetons d’authentification. La deuxième bibliothèque la plus populaire est retrofit, qui génère des clients API typés.

flutter_bloc est une bibliothèque de gestion d’état basée sur le modèle BLoC (Business Logic Component). BlocProvider transmet les états dans l’arbre de widgets, BlocBuilder reconstruit l’UI lors du changement d’état, et BlocListener gère les effets secondaires (navigation, SnackBar). Cubit est une version simplifiée de BLoC sans événements.

go_router est une navigation déclarative pour Flutter par Google. Les routes sont décrites dans la configuration GoRouter avec prise en charge des routes imbriquées, des redirections et des deep links. ShellRoute divise la navigation entre les onglets BottomNavigationBar. GoRouter 14.0 prend en charge les chemins type-safe et StatefulShellRoute avec préservation de l’état des onglets.

PaquetInstallations/moisObjectif
dio12M+Client HTTP avec intercepteurs
flutter_bloc8M+Gestion d’état (BLoC)
go_router5M+Navigation déclarative
firebase_core10M+Intégration Firebase

Foire aux questions

Quels langages sont utilisés dans Flutter ?

Flutter utilise le langage Dart. Dart 3.x prend en charge null safety, le pattern matching, les classes scellées et les records. Le moteur Flutter est écrit en C/C++, mais le développeur écrit l’application exclusivement en Dart. De plus, des canaux de plateforme personnalisés (Platform Channels) peuvent être utilisés pour appeler du code Swift/Kotlin.

Flutter est-il meilleur que React Native ?

Le choix dépend du projet. Flutter offre des performances supérieures grâce à la compilation AOT et à son propre moteur de rendu. React Native donne accès à un vaste écosystème JavaScript et permet d’utiliser du code web existant. Flutter est leader en termes de fréquence d’images, React Native en nombre de bibliothèques prêtes à l’emploi.

Peut-on utiliser Flutter pour le développement web ?

Oui, Flutter for Web compile Dart en JavaScript/DOM ou WebAssembly. La version web prend en charge la mise en page adaptative, le routage et les éléments Canvas personnalisés. Cependant, pour les exigences SEO complexes, Flutter Web est en retrait par rapport aux projets classiques React/Vue en raison de l’absence de rendu côté serveur et de HTML natif.

Qu’est-ce que FlutterFlow ?

FlutterFlow est une plateforme low-code pour créer visuellement des applications Flutter. Le développeur construit l’interface par glisser-déposer, configure la logique via un éditeur visuel et exporte du code Dart prêt. FlutterFlow est utilisé pour les prototypes et les applications simples, mais est inférieur à la personnalisation manuelle du code.

Quelles grandes entreprises utilisent Flutter ?

Google utilise Flutter dans Google Pay, Google Classroom et Google Nest. Parmi les autres grands projets figurent Alibaba (application Xianyu avec 100 millions d’utilisateurs), eBay (application mobile), BMW (interface iDrive), Tencent (Qidian) et Toyota (système d’infodivertissement).

Résumé

  • Flutter est un framework Google pour le développement multiplateforme en Dart avec support de 6 plateformes
  • Son propre moteur de rendu Impeller offre 60–120 FPS sans chute d’images
  • Les widgets sont le fondement de l’architecture — StatelessWidget et StatefulWidget couvrent tout scénario UI
  • Hot Reload accélère le développement : les changements apparaissent en 300–800 ms sans redémarrer l’application
  • L’écosystème pub.dev compte plus de 45 000 paquets pour HTTP, navigation, état et Firebase
  • La compilation AOT de Dart offre des performances comparables aux applications natives
  • Choisissez Flutter pour les MVP, projets multiplateformes et applications avec UI personnalisée

Nous développerons une application mobile clé en main

IT Sectr crée des applications iOS et Android pour les startups et les entreprises depuis 2017. Nous vous conseillerons et vous proposerons la meilleure solution.

Discuter du projet

Lisez aussi