<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Boris Gautier </title>
    <description>The latest articles on DEV Community by Boris Gautier  (@borisgauty).</description>
    <link>https://dev.to/borisgauty</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F605802%2Fd86c69ec-59c0-4156-b39e-8363f2a586ba.jpeg</url>
      <title>DEV Community: Boris Gautier </title>
      <link>https://dev.to/borisgauty</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/borisgauty"/>
    <language>en</language>
    <item>
      <title>Les Flutter Actions : qu'est ce que c'est?</title>
      <dc:creator>Boris Gautier </dc:creator>
      <pubDate>Fri, 12 Jan 2024 08:21:46 +0000</pubDate>
      <link>https://dev.to/borisgauty/les-flutter-actions-quest-ce-que-cest-5ep4</link>
      <guid>https://dev.to/borisgauty/les-flutter-actions-quest-ce-que-cest-5ep4</guid>
      <description>&lt;p&gt;Les Flutter Actions, dérivées des GitHub Actions, jouent un rôle crucial dans le processus de développement d'une application Flutter en automatisant diverses tâches, améliorant ainsi l'efficacité et la qualité du code. Voici un résumé complet de leur importance :&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Automatisation des Workflows : Les Flutter Actions permettent la création d'un workflow automatisé, définissant les étapes du processus de développement. Cela inclut la compilation du code, les tests unitaires, la génération d'APK (Android) ou d'IPA (iOS), et d'autres tâches essentielles.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Intégration Continue : Les Flutter Actions favorisent l'intégration continue (CI), garantissant que chaque modification du code est automatiquement testée, compilée et évaluée pour identifier d'éventuels problèmes dès leur apparition. Cela contribue à la détection précoce des erreurs et à la stabilité du projet.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Tests Automatisés : L'utilisation des Flutter Actions facilite l'exécution automatisée des tests unitaires, des tests d'intégration et d'autres tests de qualité. Cela assure la fiabilité du code en garantissant que les fonctionnalités existantes ne sont pas altérées par de nouvelles modifications.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Déploiement Continu : Les Flutter Actions permettent également la mise en œuvre de déploiements continus (CD). Une fois les tests réussis, l'application peut être automatiquement déployée sur différentes plates-formes, simplifiant ainsi la distribution et la mise à jour rapide de l'application.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Gestion des Dépendances : Les actions peuvent être utilisées pour gérer les dépendances du projet, assurant que les bibliothèques tierces sont mises à jour régulièrement et que le projet reste compatible avec les dernières versions des packages.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Rétroaction Rapide : Grâce à l'exécution rapide des workflows à chaque modification du code source, les développeurs reçoivent une rétroaction rapide sur la qualité de leur travail, favorisant ainsi une amélioration continue du code.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Personnalisation : Les Flutter Actions peuvent être personnalisées pour répondre aux besoins spécifiques du projet. Des scripts personnalisés peuvent être intégrés pour effectuer des actions spécifiques avant ou après certaines étapes du workflow.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Gestion des Environnements : Les actions permettent la gestion des environnements, assurant la cohérence entre les environnements de développement, de test et de production, minimisant ainsi les erreurs liées aux différences d'environnement.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;En conclusion, l'intégration des Flutter Actions dans le processus de développement d'une application Flutter offre une approche automatisée, cohérente et fiable, améliorant la qualité du code, accélérant les cycles de développement et facilitant le déploiement continu.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F99rxrgu8ay7xaqbemhye.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F99rxrgu8ay7xaqbemhye.jpeg" alt="Image description"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Flbmaugg2pspumwbacgun.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Flbmaugg2pspumwbacgun.jpeg" alt="Image description"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>flutter</category>
      <category>mobile</category>
      <category>github</category>
      <category>cicd</category>
    </item>
    <item>
      <title>What are some rules to follow for good app architecture in Flutter App?</title>
      <dc:creator>Boris Gautier </dc:creator>
      <pubDate>Tue, 27 Dec 2022 08:29:39 +0000</pubDate>
      <link>https://dev.to/borisgauty/what-are-some-rules-to-follow-for-good-app-architecture-in-flutter-app-1cla</link>
      <guid>https://dev.to/borisgauty/what-are-some-rules-to-follow-for-good-app-architecture-in-flutter-app-1cla</guid>
      <description>&lt;p&gt;&lt;strong&gt;RULE: Avoid singletons&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;If you want your code to be testable, there are various alternatives to singletons:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;constructor arguments (doesn't scale well with deep widget hierarchies)&lt;/li&gt;
&lt;li&gt;InheritedWidget or Provider&lt;/li&gt;
&lt;li&gt;Service locators&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;RULE: Zero (or very little) business logic in the widgets.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Widgets should be as dumb as possible and only be used to map the state to the UI.&lt;/p&gt;

&lt;p&gt;Small exceptions: sometimes I include some simple currency, date, or number formatting code in my widgets if it makes life easier.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;RULE: No Flutter code (including BuildContext) in the business logic.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Your view models/blocs/controllers are used to update the widget state in response to events.&lt;/p&gt;

&lt;p&gt;By ensuring that these classes don't have any UI code in them, they can be easily unit tested.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;RULE: Navigation code belongs to the widgets&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;If you try to put your navigation code in the business logic, you'll have a hard time because you need a BuildContext to do so.&lt;/p&gt;

&lt;p&gt;Solution:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;emit a new widget state&lt;/li&gt;
&lt;li&gt;listen to the state in the widget and perform the navigation there&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;RULE: Show dialogs and snackbars in the widgets&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Same as above. When we need to show an alert dialog because something went wrong, this is what we should do:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;emit a new error state&lt;/li&gt;
&lt;li&gt;listen to the state in the widget and use the context to show the alert dialog&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;RULE: Do UI validation in the widgets&lt;/strong&gt;*&lt;/p&gt;

&lt;p&gt;*This may be a controversial one.&lt;/p&gt;

&lt;p&gt;FormState and TextEditingController depend on the widget lifecycle, so they shouldn't go in the view models/blocs etc.&lt;/p&gt;

&lt;p&gt;Keep them in your widgets and offload everything else to the business logic.&lt;/p&gt;

</description>
      <category>app</category>
      <category>flutter</category>
      <category>architecture</category>
      <category>rule</category>
    </item>
  </channel>
</rss>
