arrow_back

Le static metaprogramming débarque sur Dart : quel impact sur vos apps Flutter ?

Julien Pipard LEAD DEV iOS
8 Avril 2024 • Lecture 3 min

Le static metaprogramming pourrait arriver bientôt sur Dart après une attente de 5 ans.

Pour nos experts mobiles, et plus précisément nos experts Dart, c’est une avancée importante, démontrant l’ouverture d’esprit de la communauté sur les nouvelles normes du marché. Cette évolution du langage Dart va également impacter le Framework Flutter qui utilise ce langage, afin de simplifier davantage le développement d’apps mobiles.

Pourtant aujourd’hui, la métaprogrammation est un concept déjà très présent dans les langages de “Declarative UI”, comme le démontre SwiftUI ou Jetpack Compose avec ses propriétés observables permettant de créer des comportements dynamiques dans l’interface utilisateur. La métaprogrammation est une technique qui autorise un programme à changer d'autres programmes ou lui-même, à tout moment, offrant ainsi plus d'automatisation dans la création de code et renforçant la flexibilité et l'efficacité du développement. Dart souhaite en fait appliquer spécifiquement cette technique au moment de la compilation plutôt qu'à l'exécution : on appelle cela la “métaprogrammation statique”. Elle sera pour ce langage précis utilisé sous le terme de “Macros”.

La métaprogrammation avec Dart jusqu’à aujourd’hui 

Actuellement, Dart ne propose pas de solution intégrée pour la métaprogrammation. Il faut nécessairement passer par une bibliothèque supplémentaire comme Freezed. Par exemple, pour créer une classe qui définit un modèle de données à partir d'un format JSON, il faut annoter le code et Freezed génère alors automatiquement des fichiers supplémentaires pour gérer la conversion JSON en modèle Dart. Ce processus de génération de fichiers peut rendre le projet plus lourd et rendre le débogage plus complexe car il peut être difficile de rectifier les erreurs dans des fichiers générés automatiquement et non écrits directement par le développeur.

S’il ne passe pas par une bibliothèque externe, le développeur doit écrire manuellement le code qui convertit un format JSON en un modèle pour chaque nouvelle classe créée. Cela peut rendre le processus de développement là aussi plus lourd et plus long car il nécessite une duplication constante du code pour chaque nouvelle classe.

Les Macros : on y va ou pas ? 

L’usage de ces Macros est actuellement en phase d'expérimentation et les syntaxes risquent d’évoluer fortement au fil des mises à jour de Dart. C’est pourquoi, nous déconseillons pour l’instant son usage pour des projets de production car cela entrainerait trop de risque d’incompatibilité de code. Ces notes sont disponibles dans le GitHub du code Dart et vous pourrez, à partir de la version expérimentale Dart 3.4.0-77.0.dev, tester les Macros.

Petit exemple de code qui crée un objet User à partir d’une structure JSON :

@Model()
class User {
  User({
    required this.username,
    required this.password,
  });

  final String username;
  final String password;
}

String json = “{‘username’: ‘test’, ‘password’: ‘test’}”;

Sans l’usage de la Macro @Model, nous aurions dû générer tout le code de conversion JSON (ie: User.fromJson(json)) à la main ou utiliser la librairie Freezed qui aurait donc généré de nouveaux fichiers. La macro @Model simplifie grandement la tâche en rendant abstraite la conversion JSON vers un modèle, sans générer plus de code.

Ce que dit la métaprogrammation statique de la philosophie de Dart

N’oublions pas que Dart, créé en 2011, est plus ancien que les langages modernes pour interfaces déclaratives tels que SwiftUI et Jetpack Compose, qui ont tous deux émergé en 2019. Cela signifie que Dart a dû faire face à des défis d'adaptation pour répondre aux nouvelles préférences des développeurs mobiles. Le static metaprogramming illustre donc bien la flexibilité et la résilience de la communauté Dart, qui a réussi à faire évoluer le langage pour qu'il reste en phase avec les tendances actuelles du développement d'applications natives.

La métaprogrammation statique promet en effet de changer profondément comment nous programmons en Dart, en minimisant le volume de code grâce à l'automatisation. Cela va non seulement simplifier la lisibilité et la maintenance mais aussi permettre l'utilisation de techniques de conception plus élaborées. De telles avancées rapprochent les développeurs Dart des approches de développement modernes similaires à celles utilisées dans SwiftUI (pour iOS) ou Jetpack Compose (pour Android), favorisant des paradigmes de programmation plus unifiés et avancés dans le développement mobile.

Une question sur la métaprogrammation statique ou sur l'un de vos projets d'apps ? Contactez-nous !

Sur le même sujet

Étude : Pourquoi est-il urgent de refondre votre site en 2026 ?
10/06/2026

Étude : Pourquoi est-il urgent de refondre votre site en 2026 ?

Je découvre arrow_forward
Flutter 3.47 : le framework largue pour de bon Material et Cupertino
29/09/2026

Flutter 3.47 : le framework largue pour de bon Material et Cupertino

Je découvre arrow_forward
Pourquoi choisir Firebase AI Logic pour intégrer l'IA dans une app Android ?
29/06/2026

Pourquoi choisir Firebase AI Logic pour intégrer l'IA dans une app Android ?

Je découvre arrow_forward
DCM : comment booster la qualité du code de votre application Flutter ?
18/03/2026

DCM : comment booster la qualité du code de votre application Flutter ?

Je découvre arrow_forward
DreamFlow : du no-code à l’IA, le game changer est-il enfin là ?
25/02/2026

DreamFlow : du no-code à l’IA, le game changer est-il enfin là ?

Je découvre arrow_forward
De retour du Drupal AI Summit 2025 : on passe aux choses sérieuses !
23/12/2025

De retour du Drupal AI Summit 2025 : on passe aux choses sérieuses !

Je découvre arrow_forward
Cross-platform natif : illusion technologique ou futur du développement mobile ?
15/12/2025

Cross-platform natif : illusion technologique ou futur du développement mobile ?

Je découvre arrow_forward
Independence Day : les design systems Cupertino et Material seront bientôt découplés du cœur du framework de Flutter
27/10/2025

Independence Day : les design systems Cupertino et Material seront bientôt découplés du cœur du framework de Flutter

Je découvre arrow_forward
USERADGENTS crée un module Captchafox sur-mesure pour Drupal
02/01/2025

USERADGENTS crée un module Captchafox sur-mesure pour Drupal

Je découvre arrow_forward
Quelle solution choisir pour gérer de la donnée en temps réel ? Retour d’expérience sur le protocole Mercure
13/11/2024

Quelle solution choisir pour gérer de la donnée en temps réel ? Retour d’expérience sur le protocole Mercure

Je découvre arrow_forward
De retour de la Flutter Connection 2024 : ce qu’il fallait retenir pour les projets d’applications hybrides
13/05/2024

De retour de la Flutter Connection 2024 : ce qu’il fallait retenir pour les projets d’applications hybrides

Je découvre arrow_forward
expand_less