Revivez l'Apér'Ops #19 d'Août 2019 comme si vous y étiez
Retour d'expériences des consultants Elosi sur l'utilisation de ©Flutter

Framework ©Google
Flutter est un framework développé par Google, le plus récent de tous. De ce fait, les ingénieurs ont pu observer les points forts et les faiblesses de chaque outil existant pour n’en extraire que la quintessence.
Ce nom vous est par ailleurs peut-être familier, puisqu’il s’agit de l’une des briques essentielles de Fuchsia/Andromeda. En effet ce framework est utilisé pour tout ce qui est interface utilisateur. Mais aujourd’hui Flutter se fait surtout connaître pour sa capacité à concevoir des applications natives multiplateforme pour Android et iOS (Windows/Mac/Linux sont également supportés).
L’équipe de Flutter provient essentiellement du Web (plus particulièrement de Chrome) et a essayé d’adapter sa philosophie au monde du mobile. Ils se sont appuyés pour cela sur Skia, le moteur qui fait partie intégrante de Chrome ou encore de toute la gestion du texte d’Android.
Dart : langage de programmation
Google a créé de nombreux langages de programmation, dont Dart. Celui-ci ne vous dit peut-être rien… et ne nous le cachons pas, il commençait à tomber dans l’oubli. Mais depuis l’émergence de Flutter, ce langage retrouve des couleurs et a même connu une version 2.0.
Si Google a opté pour Dart, c’est parce qu’il offre deux modes de fonctionnement. Le premier, nommé AOT (pour Ahead Of Time), permet de générer une application native pour chaque plateforme. L’avantage de Flutter, par rapport à ses concurrents, est donc fort, puisque le code sera optimisé directement pour l’architecture sur laquelle il fonctionnera.
Le deuxième mode de fonctionnement est dit JIT (Just-In-Time) et offre la fonctionnalité de Hot Reload lors des développements. Si vous avez déjà eu l’occasion de concevoir une application Android native, vous avez probablement été effrayés devant les temps nécessaires entre chaque build. L’idée du Hot Reload en Flutter est de corriger ce problème en ne mettant plus que quelques millisecondes (voire secondes dans le pire des cas) entre chaque modification. Le développement de son application est alors bien plus rapide.
Outre ces deux modes, Dart est aussi très performant pour gérer l’allocation et le “garbage collector”, c’est-à-dire l’élimination des objets en mémoire qui ne sont plus utilisés.


Un catalogue de Widget
Contrairement à React Native, Google a choisi la solution la plus compliquée, à savoir recréer l’ensemble des composants graphiques en Flutter. Cette direction qui demande un travail colossal a un énorme avantage : les développeurs sont toujours certains d’avoir le rendu souhaité sur les différentes plateformes. Exit la gestion des versions sur Android, où Holo et Material n’ont cessé d’évoluer au fil du temps.
En contrepartie, cela veut dire qu’en utilisant Flutter dans son application, il est nécessaire d’incorporer ce code, qui vient alourdir l’apk/ipa finale..
Toutefois, et dans la mesure où Flutter fonctionne sur tous les terminaux Android à partir de la version 4.1, ce n’est pas un si grand défaut. En effet, les développeurs natifs Android sont obligés de faire de même s’ils souhaitent bénéficier des composants Material sur une large palette de versions d’OS.
À noter que sur iOS, les iPhone et iPad sont compatibles depuis la version 8.0 sur les modèles 32 et 64 bits.
Des widgets ... encore des widgets
Contrairement à d’autres systèmes, Flutter offre une quantité incroyable de Widgets (plusieurs centaines). L’idée développée par ses concepteurs est qu’un Widget ne doit faire que sa propre tâche.
Prenons le cas d’un texte : le Widget Text ne sait afficher que du texte à l’écran. Il ne saura pas modifier la couleur de fond ou gérer son emplacement à l’écran. Ces deux autres tâches seront dédiées à d’autres Widgets spécialisés. Ce parti pris est ce qui fait aujourd’hui la force de ce framework, en extrayant des performances incroyables.
Ce principe permet aussi à Flutter d’être compréhensible par tous. Certes, les développeurs continueront à concevoir des applications, mais on pourrait aisément penser que des designers pourraient s’y intéresser.
Voici un exemple, affichant un texte et une icône centrés :
Center(
child: Column(
children: [
Text(‘Hello, World!’)),
Icon(Icons.star, color: Colors.green)
]
)
);

Un exemple concret ?
Il existe une application de démonstration que vous pouvez télécharger sur le Google Play.
Malheureusement pour iOS, il faut compiler vous-même l’application, car Apple refuse les applications de ce type.
Outre la galerie Flutter, vous pouvez trouver sur le site officiel quelques applications mises en avant. Google cite notamment le cas d’Alibaba qui a déployé en Chine une application auprès de 50 millions d’utilisateurs, preuve que Flutter est tout à fait robuste pour passer dès à présent en production.
Release
Le projet Flutter a connu une véritable envolée depuis 2019, correspondant à la publication de la première version bêta. De nombreuses versions se sont ensuite succédé, jusqu’à atteindre la Release Preview. Cette étape marque l’approche d’une version stable et finale.
L’équipe de Flutter a annoncé la deuxième Release Preview. Au programme : un catalogue de Widgets reprenant l’interface d’iOS (Cupertino) plus fourni, la possibilité d’exécuter du code Dart/Flutter sans pour autant que l’application soit au premier plan ou encore une réduction de la taille de l’application de 30 % environ.
