Modèles et bonnes pratiques – Flutter

19 juin 2026

Modèles et bonnes pratiques – Flutter

I – Introduction

 

Le but de ce document est de définir et présenter les normes et les meilleures pratiques de l’équipe Flutter d’ioasys. L’objectif est que ce document soit utilisé comme guide pour le développement des projets au sein d’ioasys, établissant de manière commune à toute l’équipe les pratiques, méthodologies, architectures, normes, cadres, etc. qui peuvent/devraient être utilisés.

Cet point est important, car une fois qu’une « langue commune » est établie entre toute l’équipe, des éléments tels que le contrôle de qualité, l’alignement technique de l’équipe, la maintenabilité, etc. sont favorisés, c’est pourquoi il est d’une importance cruciale de compter sur la collaboration de tous pour que ce qui est établi ici soit suivi.

Autre aspect important, le contenu de ce guide ne sera pas statique, c’est-à-dire pouvant être modifié au fur et à mesure que de nouvelles technologies et besoins apparaissent, c’est pourquoi l’équipe Android est toujours ouverte à écouter des propositions et des améliorations qui pourront être ajoutées à ce document. Pour cela il suffit de modifier ce document et de soumettre une demande de fusion avec modification ou ouvrir un ticket dans ce dépôt.

II – FVM

 

La version de Flutter utilisée dans ce projet est la 2.12.1. Ce projet utilise Flutter Version Management (FVM). Pour l’activer, il faut lancer pub global activate fvm et ajuster l’affectation du PATH de Flutter vers C:UsersUsuariofvmdefaultbin. Ensuite, au sein du projet, exécutez fvm install pour installer la version. Il sera ensuite nécessaire de configurer les préférences de VS Code en appuyant sur F1.

Ajoutez le fragment ci-dessous à la configuration

{
    ...
    "dart.flutterSdkPaths": [".fvm/flutter_sdk"]
}

Il suffit maintenant d’appuyer sur F1 et de choisir Flutter: Change SDK

Changer le SDK

et choisir la version dans le projet

définir la version

III – Présentation générale de l’architecture

 

L’architecture du projet est divisée de manière modulaire en micro-apps, avec le plus faible degré de couplage possible. Chaque module contient son propre écosystème architectural et la proposition adoptée est celle du Clean Dart. Voir la documentation sur CLEAN ici CleanDart

Propositions d’architecture

 

Selon chaque projet, on peut trouver des structures de projet différentes pouvant être organisées comme suit

IV – Demandes de fusion

 

Consultez la documentation sur les demandes de fusion ici

V – Git Flow

 

Consultez la documentation sur Git Flow ici

VI – Tests

 

Les tests sont d’une grande importance pour assurer la qualité des projets; avec l’implémentation de Clean Dart, cela facilite la création des tests

Structure des dossiers

 

Il est important et très efficace que la structure des dossiers de tests suive la même structure que celle du projet Structure des dossiers de tests

Étant donné – Lorsque – Alors

 

Given-When-Then

Le concept Given-When-Then vise créer un « modèle » utilisé dans tout type de documentation écrite. Ce modèle comportera toujours trois mots déjà définis et il va sans dire lesquels. Voici un exemple de documentation d’exigence rédigée selon ce modèle

Étant donné – Donnée

 

Étant donné est la partie où vous définissez le scénario. Quelle est la situation actuelle ? Qu’est-ce qui doit exister/se produire à l’avance pour que le problème ou l’exigence survienne ?

Lorsque – Quand

 

Lorsque est le « déclencheur » de la situation. Quand le problème est-il observé ? Quand la nouvelle fonctionnalité est-elle appelée ?

Alors – Donc

 

Évidemment, Alors décrit la conséquence du problème ou le résultat attendu de la nouvelle exigence

Exemple

 

test(''' 
      Étant donné une requête pour rechercher des entreprises
      Lorsque le retour est un succès
      Alors doit renvoyer la liste des entreprises
''', () async {
}

Objets simulés

 

Pour les mocks, nous utiliserons mockito; dans la version récente, cela passe par l’utilisation de build_runner pour la génération des classes simulées. Pour cela, il suffit d’ajouter la classe à simuler dans l’annotation GenerateMocks.

@GenerateMocks([IEnterpriseDatasource])
void main() {
  late EnterpriseRepository _repository;
  final _datasource = MockIEnterpriseDatasource();

  setUp(() {
    _repository = EnterpriseRepository(_datasource);
  });

  group('Testes de succès', () {
    test(''' 
          Étant donné une requête pour rechercher des entreprises
          Lorsque le retour est un succès
          Alors doit renvoyer la liste des entreprises
    ''', () async {
      //préparer
      when(_datasource.get()).thenAnswer((_) async => []);

      //exécuter
      final result = await _repository.get();

      // assertion
      expect(result.fold(id, id), isA>());
      verify(_datasource.get()).called(1);
      verifyNoMoreInteractions(_datasource);
    });
  });
}

Recursos de terceiros

 

Il est important que l’équipe soit alignée sur les ressources tierces (bibliothèques, frameworks, SDKs) qui peuvent être utilisées dans les projets de l’équipe Flutter, car ces dépendances peuvent avoir un impact significatif sur le développement et la maintenance d’un projet (obsolescence, bugs ouverts, incompatibilités, etc.).

Avant d’ajouter une ressource qui ne figure pas dans la liste ci-dessous, vérifier les éléments suivants :

Ci-dessous se trouvent les ressources qui peuvent être utilisées :

VIII – Bonnes pratiques de développement

 

Pour garantir que les bonnes pratiques de développement suivent le guide officiel de Dart, nous utilisons le package Effective Dart. Cela générera des avertissements sur des lignes qui ne respectent pas les bonnes pratiques de Flutter et inclura un lien vers la documentation officielle de Dart expliquant comment les corriger.

Avertissement sur les bonnes pratiques

Documentation officielle d'Effective Dart

Fabien Delpont

Auteur

Fabien Delpont

Fabien Delpont, développeur et créateur du site Python Doctor.