Logo Spiria

Flutter, le nouveau SDK mobile multiplateforme

10 janvier 2019.

Au début du mois de décembre, Google a présenté la version 1.0 de son SDK de développement mobile multiplateforme. Que faut-il savoir de Flutter et quelles sont ses chances de succès ?

Nous avons quantité de façons de développer des applications mobiles multiplateformes. Il y a d’abord les applications natives, qui sont réalisées avec les outils propres à chaque plateforme (ceux de Google et ceux d’Apple) et qui vous obligent à maintenir en parallèle et à grands frais deux applications au code différent, très peu ou pas du tout portable. Et il y a ensuite nombre de manières de pouvoir travailler avec une base de code commune, chacune avec ses avantages et inconvénients. Vous pouvez utiliser une base de code C# partagée avec Xamarin de Microsoft, utiliser les technologies du web (CSS3, HTML5, JavaScript) avec Apache Cordova, ou encore construire des applications reposant seulement sur JavaScript avec le framework React Native de Facebook. Il y a aussi les très limitées applications web progressives soutenues par Google Chrome. Et vous pouvez trouver plein d’autres options, plus ou moins confidentielles et efficaces. Il vous est même possible de mixer certaines techniques. Pour des raisons encore peu claires, Google a cru bon d’offrir une nouvelle option pour le développement mobile multiplateforme, étrangère à ses outils Android : le SDK à code source ouvert Flutter.

Le 27 février dernier, Google avait présenté la bêta 1 de Flutter et ce 4 décembre, l’entreprise a organisé un événement spécial au Musée de la science à Londres, le « Flutter Live », afin de lancer en fanfare la version 1.0 du SDK. C’est dire que l’on voit les choses en grand pour ce nouvel outil de développement à Mountain View.

Flutter repose sur le langage de programmation Dart lancé par Google en 2011, conçu à l’origine pour le développement mobile multiplateforme, et dont la version 2.0 est sortie en août dernier. Ce langage, dont l’utilité restait à démontrer, n’a jamais rencontré la moindre popularité en dehors du Googleplex et n’a pas suscité la formation d’une communauté dont on aurait pu croiser des membres sur GitHub, Stack Overflow, Freenode, ou n’importe où ailleurs. Il a cependant remporté des distinctions, comme celle décernée par Codementor d’être le langage no 1 à ne pas apprendre en 2018, devant Objective-C, CoffeScript et Erlang. Cela ne veut pas dire en soi que c’est un mauvais langage, mais qu’il n’a pas su rencontrer son public. Peut-être que Flutter pourra justement raviver la flamme, et c’est même probable. De plus, si vous pratiquez déjà Java, JS, Kotlin, Swift or C#, ce langage est facile à apprendre.

Ensuite, Flutter utilise son propre moteur de rendu basé sur la librairie 2D Skia Graphics, dont Google avait fait l’acquisition en 2005 avant de la mettre à disposition en licence BSD modifiée, et qui est utilisée par Chrome OS et Google Chrome. C’est là ce qui donne une appréciable différence avec une application purement native : une application Flutter ne fait pas appel à des composants graphiques du système, elle dessine tout, y compris des reproductions au pixel près des éléments d’interface d’iOS et de Material pour Android. C’est aussi une nette différence avec le comportement d’une application React Native ou Xamarin où les propriétés d’objets graphiques d’interface peuvent être supportées de manière différente entre iOS et Android.

Pour bien comprendre la spécificité de Flutter par rapport aux autres solutions, il faut écouter Tim Sneath, chef de produit du groupe Flutter et ancien de Microsoft : « Pour nous, l’analogie la plus proche n’est pas un framework multiplateforme, c’est plutôt un peu comme Unity. Unity est un moteur de jeu, vous écrivez du code qui fonctionne super bien sur les deux plateformes et son moteur est optimisé pour de grandes performances. »

La promesse de Google tient en 3 points :

Développement rapide. Une des fonctions sexy de Flutter est le « stateful hot reload », ou recharge à chaud dynamique, qui permet de voir instantanément dans l’émulateur l’effet des modifications du code, sans aucune compilation requise. Cette fonction fait gagner énormément de temps. À noter que pour le développement, il existe déjà des plug-ins pour utiliser les environnements Visual Studio Code, Android Studio et IntelliJ.

Expérience utilisateur « native ». Nous mettons native entre guillemets, parce que, oui, vous pouvez reproduire une expérience utilisateur qui semble tout à fait native, mais premièrement, elle n’utilise pas des composants du système (ce sont des reproductions générées par le moteur de rendu de Flutter) et secondement, vous êtes aussi libre de faire n’importe quoi qui vous passe par la tête. Flutter est entièrement maître de l’UI, au pixel près, et vous laisse disposer de cette puissance comme bon vous semble. Vous êtes par exemple libre d’utiliser la librairie Cupertino qui mime les composants d’iOS ou de créer votre propre UI en partant de zéro, ce qui peut mener au meilleur comme au pire. Et si le composant système a évolué au gré d’une mise à jour, celui qui est compilé avec votre application est gravé dans le marbre tant que vous ne sortez pas une nouvelle version. Ainsi, vous pourrez avoir à l’avenir le cas d’applications Flutter qui reproduisent une expérience utilisateur obsolète.

Performance native. Sans aucun doute. L’avantage de Flutter est d’offrir une vraie compilation 32/64 bits pour les processeurs ARM. Contrairement à d’autres solutions, il n’y a pas besoin d’interpréteur de code, souvent du JavaScript, qui ralentit l’exécution. Niveau performance, on va certainement se rapprocher voire égaler une application purement native.

Il faut noter enfin que l’ambition de Flutter dépasse le cadre du mobile. Tim Sneath écrit : « La principale cible de Flutter a été jusqu’à présent iOS et Android. Pourtant, nos ambitions pour Flutter ne se limitent pas au mobile, mais s’étendent à un plus large éventail de plateformes. En effet, dès le départ, Flutter a été conçu comme une boîte à outils pour des interfaces utilisateur portables, suffisamment flexible pour aller partout où des pixels sont dessinés. » Flutter pourrait ainsi à l’avenir servir à concevoir des applications desktop multiplateformes, Windows, Mac OS et Linux.

En attendant, Flutter paraît comme une solution prometteuse qui nous évitera peut-être le questionnement : est-ce que que je choisis une application lente, une application qui ne paraît pas native ou une application qu’il faut écrire deux fois ? Et comme Flutter est appelé à jouer un rôle dans le mystérieux Fuchsia OS, peut-être sommes-nous mieux de dès aujourd’hui nous mettre à Dart.

Pour aller plus loin, nous vous suggérons la lecture de cette brève introduction à la programmation avec Flutter publiée par Android Authority. Et pour aller encore plus loin, il y a la documentation officielle.