Retour d’expérience sur Flutter

par

Depuis 2008, il est facile d’installer des applications tierces sur nos téléphones depuis l’AppStore pour Apple et le Google Play pour Android. Ce n’était toutefois pas évident de les développer et de les publier car il fallait alors écrire l’application en deux langages différents, sur deux systèmes différents.

Il y a bien eu quelques tentatives de simplifier tout cela, notamment avec Phonegap, qui permet de “convertir” une application web en application mobile. C’était et ça reste encore aujourd’hui laborieux et complexe à publier même s’ils ont le mérite d’être les premiers à s’être attaqués à la question.

Bien du chemin a été fait depuis et il y a 2 ans, Google a sorti un kit de développement dénommé Flutter. C’est un Kit qui se base sur le langage de programmation Dart, créé en 2011 - également par Google - et qui permet de développer des applications web & mobiles, avec pour vocation de remplacer le Javascript (rien que ça).

Du coup, Flutter, ça donne quoi ?

Installation

Même si en tant que développeur, vous devez maîtriser quelque peu la langue de Shakespeare, pour utiliser Flutter, il sera impératif de comprendre l'anglais. Il n’y a pas de docs dans d'autres langues.
De manière générale, vous pouvez tomber sur des tutoriels ou des sujets en Français, mais ça sera toujours produit par la communauté.

Le tutoriel officiel d’installation est à cette adresse : https://flutter.dev/docs/get-started/install
Il est assez rigoureux, ce qui est normal vu que vous devez mettre en place tout un IDE. Flutter s’intègre comme plugin d’Android Studio, tout comme Dart dont vous allez avoir besoin.

Cela reste assez rapide sur un PC récent. Il faut prévoir à minima 8Go de RAM et une dizaine de Go disponible tout de même, pour les mises à jour à venir et les émulateurs à installer. Préférez également installer tout cela sur un SSD, c’est assez gourmand en ressources et la vitesse de lecture/écriture joue pour beaucoup dans la réactivité du système.

Sur Windows, il est recommandé de mettre en place des variables d’environnement assez rapidement car vous allez avoir souvent besoin d’accéder à flutter ainsi.

Flutter envoie par défaut - anonymement - les infos sur votre usage du kit à Google Analytics, en vue de l’améliorer. Vous le savez avec les articles Privacy, la vie privée nous tient à coeur et vous pouvez désactiver ces envois via la commande “flutter config --no-analytics”.

Au niveau de l’éditeur, je recommande de rester sur Android Studio. Les outils préinstallés pour la distribution sur le Play Store sont les bienvenus. Flutter fonctionne toutefois avec IntelliJ, de JetBrains.

Android Studio et son interface bien chargée

Pour les tests, vous avez soit la possibilité d’utiliser votre téléphone Android, soit un émulateur qui sera installé sur votre machine. Flutter propose le système d’hot-reload de Dart, ce qui permet de voir les changements directement sur le support de test à chaque sauvegarde, très efficace pour développer.

Utilisation générale

Flutter a cette particularité de tout considérer comme un Widget. C’est à la fois flexible et abstrait, car tout devient vite une cascade d’éléments imbriqués.

Le kit se vend comme simple d’usage, et c’est globalement vrai. Si vous utilisez les Widgets comme dans les exemples de présentation. Une utilisation un peu plus sur-mesure vous amènera à devoir fouiller dans les forums et les classes globales pour comprendre ce que les Widgets acceptent et comment les manipuler correctement.

Heureusement, il existe un tas de sujets qui donnent des explications sur comment utiliser les classes et ajuster les exemples pour arriver à vos fins.

Une excellente série d’articles pour progresser a été faite par Abraham Williams, nommée “A month of Flutter” : https://bendyworks.com/blog/a-month-of-flutter

Son objectif est d’apprendre chaque jour un petit bout de Flutter et d’expliquer ses choix de développement. C’est plutôt ludique et efficace pour apprendre les rudiments du kit.

Grâce à cet agencement en Widget, Flutter permet d’écrire moins de code qu’en natif, pour des performances presque meilleures. De nombreuses fonctionnalités natives des deux systèmes sont intégrées, même s’il faut parfois attendre un peu après une mise à jour iOS ou Android pour pouvoir en bénéficier.

Ca reste toutefois du Material Design, il n’y a pas vraiment de possibilité d’intégrer une maquette spécifique, à moins d’y passer un temps considérable. Ce n’est pas forcément une mauvaise chose l’UX tend à se standardiser pour laisser à ses utilisateurs dans leur zone de confort. Et il est plutôt simple de faire des interfaces animées avec les composants natifs.

Un des avantages de Flutter aussi est qu’il dispose de beaucoup d’extensions pour faciliter le développement de vos projets, ainsi que d’une connexion facilitée avec Firebase, le système de fonctions “cloud” de Google.

Tout cela se développe assez rapidement, ce qui est un bon point quand on peut se consacrer à plein temps à une application en particulier, un peu moins quand on a pas ce temps. Tout se déprécie rapidement et tout mettre à jour peut être un vrai frein pour des applications professionnelles.

Ressources

Comme c’est un système récent, il n'y a pas énormément de documentation ou d’assistance disponible. Toutefois, il en existe suffisamment pour sortir quelque chose de propre.

Flutter.dev : https://flutter.dev
C’est le site principal, avec la documentation et les exemples d’interface. C’est plutôt pratique pour démarrer, toutefois pas assez graduel pour être un vrai tutoriel.

Reddit : https://www.reddit.com/r/FlutterDev/
Evidemment, tout bon système doit avoir son channel Reddit ! Pratique pour échanger ou découvrir des façons d'implémenter des interfaces.

Github : https://github.com/flutter/flutter
Pas tellement plus d’informations que dans le site principal ici, c’est surtout utile pour plonger dans l’onglet “issues” et se dépatouiller d’un souci avec l’aide d’autres développeurs.

Pub.dev : https://pub.dev/flutter
La section des packages Dart spécifiques à Flutter. Il y a beaucoup d’activité de ce côté et les versions changent souvent.

Du coup ?

Flutter est un excellent langage pour développer des applications web & mobiles. Le fait de n’avoir qu’une seule base de code à maintenir pour 1 à 3 supports (Android, iOS & Web) est un très bon point pour le langage.

La distribution est simple, puisque vous pouvez exporter votre application pour les trois supports et les déposer ensuite sur les différents stores. Cela dit, la distribution sur Apple reste une plaie, mais bon.

Avec les bonnes extensions, on a pu créer une application mobile, administrable via un backoffice en ligne, sans avoir réellement d’expérience en développement mobile. Des notions de programmation (Objet, MVC) sont nécessaires pour assimiler Flutter, comme partout aujourd’hui.

Les deux points d’attention à avoir concernant Flutter sont les suivants :

  • Cela reste un très jeune langage, donc sujet à beaucoup de changements. Cela demande donc pas mal de veille sur le sujet et de mises à jour si vous démarrez une application dessus.
  • C’est du full Google. Et je vais me la jouer “grand méchant Google” mais je ne trouve pas spécialement encourageant de voir que Google contrôle une énorme partie de la chaîne des applications mobiles, si ce n’est la totalité. Même si pour être honnête, je ne trouve pas d’alternative aussi pratique et facile à maîtriser que ce qu’ils proposent actuellement en matière de développement mobile.