Durant mon cursus, j’avais déjà eu l’occasion de développer avec Android, et de vaguement toucher au Swift. Cependant, le développement d’une application cross-plateform (multiplateforme) est quasi impossible à moins de savoir précisément ce qu’on fait dans les deux langages.
Le grand défi du développement mobile est justement le cross-plateform, un langage qui permettrait de développer de manière rapide une application pour Android et une autre pour Apple. Et pourquoi pas pousser jusqu’au web ou sur ordinateur en même temps !

Jusque là, chaque application nécessitait des développeurs (Java / Kotlin pour Android et Swift pour Apple) qui travaillaient de concert dans la réalisation d’une application au design unique et aux fonctionnalités similaires. C’est ce qu’on appelle le développement natif.
Bien sûr, le développement natif a ses propres avantages :

  • plus rapide
  • plus performant
  • plus facile à maintenir

et ses désavantages :

  • plus de développeurs spécifiques (et donc un coût plus élevé)
  • développement pour un seul OS (Système d’exploitation)

Une alternative qui permettrait le cross-plateform serait React Native, je n’ai à ce jour pas eu l’occasion de travailler avec mais c’est l’un de mes projets. React étant à l’heure actuelle l’un des plus grands frameworks de développement web.

C’est alors qu’est apparu ce nouveau framework développé par Google. Un framework (ou infrastructure logicielle) est un ensemble de composants logiciels structurels qui sert à créer des applications. En l’occurence, le Flutter est basé sur le langage Dart qui ressemble à s’y méprendre à du Java. Flutter est un langage qui fonctionne avec des widgets dont voici un exemple :

@override
Widget build(BuildContext context) {
    return Scaffold(
        appBar: AppBar(),
        body: Center(
            child: Column(
            mainAxisAlignment: MainAxisAlignment.center,
            children: <Widget>[
                const Text('You have pushed the button this many times:',),
                Text('$_counter',
                    style: Theme.of(context).textTheme.headline4,),
                ],
            ),
        ),
        floatingActionButton: FloatingActionButton(
            onPressed: _incrementCounter,
            tooltip: 'Increment',
            child: const Icon(Icons.add)
        ),
    );
}

En observant ce morceau de code, extrait du code de base à l’ouverture d’un projet, on peut comprendre un peu ce qu’il fait même sans connaître Dart. Un FlotingActionButton fait quelque-chose quand il est pressé avec le callback (une fonction appelée pour faire une action) _incrementCounter. Nous observons aussi l’appBar et la colonne centrée qui contient du texte. Chaque élément (Column, Center, AppBar) est en fait un widget. Votre application entière est une arborescence de widgets imbriqués les uns dans les autres.

Il s’agit de votre tout premier projet après ouverture : le compteur incrémente quand on appuie sur le bouton. Notons au passage le design épuré et assez moderne de la bête.

L’un des avantages de Flutter qui est grandement mis en avant, y compris par les IDE (Environnement de Développement, les logiciels qui facilitent le développement) est le hot reload. Quel développeur Android n’en a jamais eu assez de devoir attendre 10 minutes pour recompiler tout son code dans l’espoir vain de changer la taille d’une police, un espace, ou une couleur, qui au final ne correspond même pas à ce qu’on attendait ?

Avec Flutter, c’est terminé !

Seuls les changements de structure entre les widgets nécessitent un hot restart qui va recharger l’entiéreté des widgets. Quelle est la différence alors ? Le hot reload permet le reload des widgets qui ont été modifiés alors que le hot restart les recharge tous. Gain de temps donc, et d’énergie car Flutter le fait tout seul à chaque sauvegarde du code !

“Bon, c’est bien beau tout ça, mais pourquoi il est autant apprécié ?”

Parce que Flutter en plus d’être open source, pratique et rapide, est cross-plateform ! Sa magie opère seulement sur iOS et Android en version stable pour le moment. Pourtant, j’ai eu l’occasion de développer une application au cours de mon stage sur navigateur web qui est en production en France. Même problème que pour le web avec le développement pour ordinateurs (windows, linux et mac) avec un channel peu stable et surtout… Des packages peu adaptés. C’est l’un des gros plus du framework qui fait aussi défaut à ces versions.

Une grosse communauté de gens actifs, développeurs aguerris ou du dimanche, tout le monde y trouve son compte ! Et puisque Flutter est open source, de nombreux développeurs travaillent sur des plugins pour compléter le framework quand celui-ci manque de fonctionnalités utiles à la majorité. Si la plus grande partie d’entre eux est compatible mobile et web (et pas complètement pour web encore), la communauté manque cruellement de plugins adaptés aux ordinateurs. N’hésitez donc pas à contribuer !

“Oui oui, c’est le monde des bisounours et pour le négatif ?”

J’aimerais vous dire que tout est parfait. Malheureusement non. Rien ne vaut le développement en natif pour une application volumineuse avec énormément de fonctionnalités. Bien sûr, cela dépend donc de votre besoin ! Pour quelqu’un d’habitué au développement, le langage Dart ne devrait pas être un grand défi, il est assez intuitif. En tout cas il l’a été pour moi. Mais ne vous découragez pas, Flutter est un framework très intéressant à maîtriser et qui possède des ressources (web, vidéos, tutos en ligne) quasi illimitées et un potentiel encore à découvrir. Google continue de travailler sur ses limites et Flutter risque de devenir très prometteur à l’avenir.