Formation Flutter Chapitre 1 Introduction Flutter
Formation Flutter Chapitre 1 Introduction Flutter
Flutter a été déclaré stable et est sorti de bêta en juin 2018 et sa version 3.7 est sortie en
2023, il s'agit donc du moment parfait pour l'apprendre !
Il utilise Dart qui est un langage créé par Google qui peut être compilé en code bas niveau
ou transpilé en JavaScript
Il est utilisé par Google pour développer la plupart de ses applications mobiles externes
comme par exemple celle pour Google Ads, ou internes comme Google Greentea
(permettant de gérer ses relations clients).
Il est également utilisé en production par Alibaba pour des applications avec plus de 50
millions de téléchargements
Il est enfin utilisé pour développer des applications sur le nouveau système d'exploitation de
Google dénommé Google Fuchsia.
Vous pouvez voir ici des centaines d'exemples d'application réalisées avec Flutter !
1 Pouvoir créer des applications hybrides réactives sans utilisation de pont JavaScript /
Plateforme native dégradant les performances.
2 Code pré-compilé AOT en code natif bas niveau augmentant les performances.
3 Widgets et Layout totalement personnalisables sans perte de performance.
4 Une très importante librairie de widgets de qualité Google.
5 Utilisation intensive par les équipes de Google, ce qui assure sa maintenabilité, sa
qualité et des mises à jour très proches de celles d'Android et d'iOS.
6 Le prochain OS de Google appelé Fuchsia utilise Flutter, ce qui assure également
l'utilisation d'un framework future proof(pérennité) est le processus d'anticipation du
futur et développer des méthodes de minimiser les effets des chocs et des contraintes
des événements futurs.
En résumé, Flutter est le framework de développement hybride le plus moderne, le plus
performant, avec une équipe de développement Google dédiée et un accès privilégié aux
futures avancées des plateformes mobiles (Android, Fuchsia étant développés par Google).
Les SDK de développement mobile ont environ dix ans avec le SDK iOS qui est sorti en
2008 et le SDK Android de Google qui est sorti en 2009.
Pour ce faire, elle utilise un langage natif pour la plateforme, et il faut donc créer une
application différente pour chaque plateforme.
Il existe aujourd'hui une multitudes d'OS et de SDK mais Android représente environ
75% du marché, suivi par iOS à 22% environ.
Pour vous donner un ordre d'idée e ou Windows Phon Samsung représente chacun
environ 0,2%.
Ils créent en fait des vues webs en HTML qui sont rendus par le mobile et utilisent des
API faisant le pont avec les services bas niveau du téléphone (caméra, audio, position,
bluetooth etc).
Elle permet une réutilisation d'une partie du code Angular / React / Vue avec Ionic 4
mais par design il ne sera jamais possible d'approcher des performances natives.
Le problème est que ces applications utilisaient du JavaScript qui communiquent avec
des API faisant le pont vers les services bas niveau et la création de widgets, ce qui
dégradent les performances de lʼapp.
Flutter fait partie de cette catégorie de frameworks et utilisent des vues réactives.
Les performances sont ainsi largement augmentées : aussi bien pour le démarrage,
que pour l'accès aux services natifs ou à la génération des vues.
Flutter utilise en outre une approche très innovante pour l'utilisation des widgets.
Flutter prend une approche différente en proposant sa propre librairie de widgets de très
haute qualité et totalement personnalisable.
La création des vues et le rendu est donc du côté Flutter et non pas du côté plateforme (que
ce soit pour les vues Web ou l'utilisation de widgets natifs). Il ne reste que la peinture des
vues (phases paint) dans les canvas.
Même pour la phase de paint, Flutter ne met à jour que les widgets en ayant besoin ce qui
améliore encore plus les performances
Flutter n'accède donc qu'à trois ensembles bas niveau : les events, les canvas
(utilisés pour le rendu des widgets) et les services Voici une vue d'ensemble de
l'architecture de Flutter :
React Native a de moins bonnes performances principalement car il n'est pas compilé en
code bas niveau mais utilise un pont vers la plateforme mobile. Cette architecture dégrade
les performances.
Les composants disponibles sur React Native sont basiques, donc si vous voulez faire des
choses un peu plus complexe il vous faudra beaucoup de développement et vous devrez
utiliser la plupart du temps des composants différents entre iOS et Android. Vous utiliserez
souvent des librairies tierces qui ne sont pas supportés par Facebook ni aucune grande
entreprise, ce qui implique qu'elles peuvent être abandonnées du jour au lendemain.
React Native est limité par l'UI de la plateforme (soit iOS, soit Android) car il utilise le rendu
de la plateforme. Ce n'est pas le cas avec Flutter, comme nous le verrons.
Les toolkits natifs sont fragmentés en fonction des versions d'Android et d'iOS car de
nouvelles UI sont ajoutées, comme par exemple de nouvelles animations, mais elles ne sont
pas compatibles avec les anciennes versions. Il est donc difficile de créer des UI
fonctionnant sur toutes les versions, même récentes, avec React Native ou des applications
natives. Avec Flutter, le rendu est effectué côté Flutter et non côté plateforme, tous ces
problèmes de compatibilité n'existent donc pas.
Flutter est plus moderne, beaucoup plus performant et plus future proof que React Native.
Si vous ne connaissez aucun des deux nous vous recommandons très fortement Flutter !
Aujourd'hui l'objectif de Dart est de pouvoir être facilement transpilé en JavaScript pour le
Web et compilé en langage bas niveau pour les applications natives.
La version 2 du langage est sortie en août 2018 et apporte de grandes avancées que nous
traiterons.
Dart est un des langages les plus utilisés chez Google. Il est utilisé pour les applications les
plus importantes en Web Google Ads, Google Shopping et des dizaines d'applications
internes.
Il est de plus en plus utilisé, et par exemple Sass, le préprocesseur CSS, a été réécrit
récemment en Dart.
Avec Dart vous êtes certains de pouvoir développer des applications scalables. Google
l'utilise en production pour des dizaine de millions de ligne de codes.
Il dispose également d'un compilateur JIT pour le développement afin de permettre une
expérience de développement optimale avec le hot reload (voir plus bas).
En étant single-threaded, Dart simplifie la gestion des accès concurrents aux données, car
il n'y a pas de besoin de synchroniser les threads ou de se préoccuper des problèmes de
concurrence. Cela facilite le développement de code robuste et prévisible, en réduisant la
complexité liée à la gestion des threads et des verrous.
Cependant, il est important de noter que bien que Dart soit single-threaded, il offre toujours
la possibilité de travailler de manière asynchrone grâce aux async/await, les Futures et les
Streams, que nous étudierons, afin de gérer l'asynchrone de manière optimale sur un seul
thread. Cela permet d'exécuter des tâches en arrière-plan de manière non bloquante, ce qui
est particulièrement utile pour les opérations réseau, les opérations d'E/S ou d'autres tâches
intensives en termes de temps.
Dart et Flutter
Nous allons maintenant voir quels sont les avantages d'utiliser Dart avec Flutter.
Grâce à Dart, et a son compilateur JIT, Flutter permet de recharger que le code qui a
changé pendant que l'application tourne, ce qui permet d'avoir la nouvelle version en
moins d'une seconde, le tout en conservant son état !
Ce design du langage est parfait pour les applications mobiles qui requièrent un
sentiment de fluidité parfaite lors de l'utilisation.
Center(child:
])
Il n'y a pas besoin de langage spécifique pour le Layout comme JSX ou XML.
Installation de Git
Sur Windows, téléchargez et installer Git en utilisant l'exécutable officiel que vous
trouverez ici
Modification du PATH
Dans la barre de recherche Windows tapez "environnement" ou "env" puis
sélectionnez Modifier Variables d'environnement puis Variables d'environnement,
cherchez la variable Path et cliquez sur modifier.
Cliquez sur "Parcourir…" et allez dans le dossier où vous avez extrait Flutter ou
copiez collez directement le chemin.
Vérification de l'installation
Vous pouvez ensuite vérifier ce qu'il nous reste à installer avec :
flutter doctor
Vous devez ensuite l'extraire et le mettre à l'endroit que vous voulez, par exemple
au même endroit que flutter.
flutter doctor
Vous devez avoir tout passé en vert et avoir le message No issues found!.
Installation de VS Code
C'est un éditeur de code créé par Microsoft et qui est gratuit. Il est très complet et
très simple à prendre en main.
Allez dans Android Studio Tools Android AVD Manager puis cliquez sur Create
Virtual Device.
Choisissez par exemple Pixel 6 puis faites Next.
Vous pouvez cliquer sur la roue de paramètres à droite vers le bas puis cliquer sur
View Mode puis Float.
Environnement GNU/Linux
Installation de VS Code
Nous recommandons VS Code. C'est un éditeur de code créé par
Microsoft et qui est gratuit. Il est très complet et très simple à prendre en main.
Vérification de l'installation
Vous pouvez ensuite vérifier ce qu'il nous reste à installer avec :
flutter doctor
Créer un raccourci
Pour créer un raccourci allez dans Android Studio puis Tools puis Create Desktop
Entry.
Installez ensuite une version d'Android par exemple Tiramisu puis faites Finish.
Vous pouvez cliquer sur la roue de paramètres à droite vers le bas puis cliquer sur
View Mode puis window.
flutter doctor
Si il reste un paquet à installer sur votre système suivez les instructions fournies.
Utilisation de VS Code
Allez dans Extensions puis installez flutter.
Remplacez utilisateur par votre username qui est indiqué dans votre terminal avant
le @, par exemple babs au-dessus.
Environnement macOS
cd
nano .zshrc
export PATH="$PATH:$HOME/flutter/bin"
Vérification de l'installation
Vous pouvez ensuite vérifier ce qu'il nous reste à installer avec :
flutter doctor
Lorsque cela vous est demandé, acceptez les licences en tapant agree puis entrée.
Configurez l'émulateur
Ouvrez un terminal et tapez :
Installation de cocoapods
Ouvrez un terminal et faites :
Puis :
Android Studio.
Utilisez l'installation standard et acceptez toutes les licences dans les onglets de
gauche.
Allez sur le menu Tools puis SDK Manager puis Android SDK puis SDK Tools et
cochez Android SDK Command-line Tools.
Faites ensuite Apply puis Ok.
flutter doctor
cd
flutter run
Ma Première application
Création d'un nouveau projet Flutter Lancez
cd create my_first_app
Sur Android Studio il suffit de faire Start a new Flutter Project sur l'écran d'accueil.
Pour notre application d'exemple, faites simplement Finish sur l'écran suivant.
Vous avez un fichier pubspec.yaml qui contient la liste des dépendances de votre
projet au format YAML.
Nous verrons dans les chapitres suivant comment installer, mettre à jour et
importer des dépendances.
Le fichier my_first_app.iml
Il s'agit d'un fichier de configuration pour les éditeurs. Vous n'aurez pas à le
modifier.
Le fichier .packages
Il s'agit d'un fichier caché qui contient les chemins vers les dépendances de votre
application. Vous n'aurez jamais à le modifier.
Le fichier .metadata
Le fichier .gitignore
Il s'agit d'un fichier caché qui est utilisé par Git afin de ne pas suivre les
changements de certains fichiers.
Il est déjà préconfiguré donc vous n'aurez normalement pas à le modifier non plus.
Le dossier test
Ce dossier contient tous les tests pour notre application Flutter. Par défaut il n'y a
qu'un seul fichier qui permet de tester le compteur de l'application par défaut.
Le dossier lib
Ce dossier contient tout le code que nous écrirons pour nos applications Flutter.
Par défaut, il ne contient qu'un seul fichier qui correspond au compteur d'exemple.
Ces dossiers contiennent tout ce dont nous avons besoin pour générer des
applications iOS et android. Nous y reviendrons plus tard dans la formation lorsque
nous créerons nos premières versions de production.
Le dossier .idea
Il contient également des fichiers de configuration pour votre éditeur de code. Vous
n'aurez pas non plus à les modifier.
Vous pouvez aussi choisir le mode debug en cliquant sur l'icône à droite de la flèche
verte.
Dans ce mode, le hot reload se fait à chaque sauvegarde par défaut (en faisant ctrl + s).
Dans les deux cas l'applications est en mode développement, tous les outils de
débogage sont activés et disponibles mais l'application est plus lente.
Vous remarquerez que si vous faites un reload (avec r ou avec une sauvegarde suivant le
mode), l'état de l'application est maintenu (et donc si vous avez incrémenté le
compteur, il conservera sa valeur).