IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)

Vous êtes nouveau sur Developpez.com ? Créez votre compte ou connectez-vous afin de pouvoir participer !

Vous devez avoir un compte Developpez.com et être connecté pour pouvoir participer aux discussions.

Vous n'avez pas encore de compte Developpez.com ? Créez-en un en quelques instants, c'est entièrement gratuit !

Si vous disposez déjà d'un compte et qu'il est bien activé, connectez-vous à l'aide du formulaire ci-dessous.

Identifiez-vous
Identifiant
Mot de passe
Mot de passe oublié ?
Créer un compte

L'inscription est gratuite et ne vous prendra que quelques instants !

Je m'inscris !

Flutter : le framework UI de Google, en plus du mobile, prend désormais en charge le desktop,
Le Web et l'embarqué

Le , par Bill Fassinou

178PARTAGES

8  0 
Flutter va bientôt permettre d'écrire de véritables applications multiplateformes y compris pour le desktop
et pourrait rivaliser avec Electron

Si certains ne jurent que par le développement en natif d’applications, des frameworks multiplateformes offrent désormais la possibilité de concevoir des applications à moindre coût, tout en essayant de livrer les meilleures performances. Certes, cette performance n’est pas aussi bonne que celle d’une application native, mais les entreprises sont tentées de baisser les coûts de développement tout en s’efforçant d’avoir des applications fidèles au maximum aux différentes plateformes.

Flutter est le dernier framework en date développé par Google. Tout en étant open source, il sert à développer des applications multiplateformes pour Android et iOS, ainsi que Fuchsia (Windows, Mac et Linux sont aussi supportés).

Les créateurs de Flutter sont issus pour la plupart du monde du web, c’est pour cela qu’on remarque qu’ils ont essayé d’imprégner les meilleures de ses pratiques dans le mobile. Le moteur de rendu de Flutter, écrit essentiellement en C++ supporte un rendu à bas niveau en s’appuyant sur la bibliothèque graphique Skia de Chrome. Il se connecte également avec des SDK spécifiques de plateforme comme ceux fournis par Android et iOS.

À l’approche d’une version stable et finale, Flutter a gagné en popularité depuis l’annonce de la première version bêta au début de cette année. Il permet d’écrire le code une seule fois et le déployer nativement sur Android, iOS, Windows, Mac et Linux avec toute la logique du web derrière (en utilisant AngularDart), c’est pour ça que ce framework pourrait changer la donne du développement multiplateforme.

Norbert, un étudiant et développeur Android qui contribue au développement de ce framwork a livré une présentation de cette question tout en présentant Flutter desktop, une solution permettant de développer des applications desktop réelles et accélérer le développement pour mobile.

Un client Desktop natif pour accélérer le développement mobile

Avant de s’attarder sur le développement d'applications desktop natives, voyons comment exécuter Flutter sur desktop peut être bénéfique pour le développement mobile.

Temps de démarrage


Pour tout développeur Android, la première des choses est de démarrer l’émulateur Android et exécuter Gradle. Dans le GIF suivant, Norbert a enregistré le démarrage de l’émultaur et l’exécution de l’application par défaut de Flutter. Cette étape a duré 2 minutes et 40 secondes, ce qui est lent.


Démarrage d'Android et exécution de Gradle (vitesse x10)

Pour accélérer cette étape, il vaut mieux exécuter l’application nativement, ce qui évite la nécessité d’exécuter Android sur votre système et passer par Gradle. Norbert explique qu’en utilisant cette méthode, vous pouvez commencer à travailler en quelques secondes.


Démarrage d'un simulateur de Flutter en temps réel

Redimensionnable en temps d’exécution

Tout développeur qui se respecte teste son application sur différentes résolutions d’écran, pour mener à bien cette tâche, vous pouvez soit créer différents émulateurs pour s’assurer que votre application tourne comme il le faut sur chaque appareil, ou bien vous pouvez faire comme ici !


Travailler avec les ressources sur votre PC

« Quand vous êtes en train de développer et tester des applications qui doivent interagir avec des ressources sur votre mobile, il peut être encombrant de transférer d’abord tous les fichiers de test vers l’émulateur ou l’appareil. »

Le mieux serait de pouvoir choisir votre fichier nativement et c’est ce qui est possible ici !


L’implémentation desktop utilise la même méthode canal que l’implémentation mobile, de ce fait, il n’y a pas besoin de changer de code.

Hot reloads et débogage

Du fait que Flutter a été en partie écrit en Dart, le langage de programmation de Google, ce framework bénéficie de la fonctionnalité de Hot Reload. Pour dire simple, elle permet de réduire considérablement les temps nécessaires entre chaque build. Ainsi, vous pourrez accélérer le développement de votre application. Le hot reloading et le débogage sont nécessaires pour tout développeur !


Hot reload et débogage de l'application native

RAM

Si vous n’avez pas une machine puissante, l’utilisation de la mémoire vive peut-être problématique. L’émulateur Android utilise à lui seul près de 1 Gb de RAM. Maintenant, essayez de tester deux applications, IntelliJ et Chrome.


1 Gb de RAM pour l'émulateur d'Android

Parce que l’embedder s’exécuter nativement, il n’est pas nécessaire de charger Android, ce qui réduit l’utilisation de la RAM.


100 Mbs de RAM pour l'application native


Les applications Desktop natives

Comme on l’a vu, Flutter facilite le développement pour mobile, mais qu’en est-il pour les applications desktop. Le fait de simplement exécuter Flutter sur desktop ne permet pas d’avoir une application de production adaptée au bureau. Il apparait juste comme si on a exécuté une application mobile sur desktop. En effet, plusieurs éléments manquent comme le pointage de souris(hover), changement de curseur, l’interaction avec la molette de défilement, etc.

Norbert et Simon Lightfoot ont réussi à implémenter ces fonctionnalités sans avoir à changer le code de plateforme. Il s’agit d’un package qui peut être inclus dans n’importe quelle application Flutter.


Application de chat générique dans Flutter sur Desktop

C’est le même code qui est en train de tourner sur l’émulateur Android.

. . .


Développez pour Android et Desktop en même temps

Remarquez que l’application est normale sur l’émulateur, mais change le curseur et ajoute l’effet de hover sur desktop.

Écrire une vraie application multiplateforme, y compris pour le desktop

Widgets


Pointage de curseur

La conception de l’interface utilisateur dans Flutter inclut la création de nombreux widgets. Un widget dans Flutter représente une description immuable d’une partie de l’interface utilisateur. Tous les graphiques y compris le texte, forme et animation sont créés en utilisant des widgets. Des widgets plus complexes peuvent être créés en combinant des widgets simples.

« La plupart des widgets que vous créez sont universellement utilisables. Comme un bouton, indicateur de chargement, etc. », a écrit Norbert. « Ceux qui nécessitent une apparence différente selon la plateforme peuvent être encapsulés facilement en vérifiant la propriété TargetPlatform. »

Les Widgets comme CursorWidget peuvent aussi être inclus dans la version Android sans souci, ils sont simplement ignorés.

Pages

Les pages se diffèrent un peu selon la plateforme et la taille de l’écran. Cependant, elles sont différentes seulement au niveau de la disposition et non pas la fonctionnalité.

Utiliser PageLayoutWidget rend facile la création de disposition pour chaque plateforme.

Le support de tablette est disponible par défaut

Plugins

Aucun changement n’est nécessaire au code Flutter lors de l’utilisation d’un plugin qui supporte le desktop embedder.

Un projet encore en développement

Ces changements ne sont pas encore disponibles, mais le développeur a informé qu’ils seront prêts prochainement. Le but étant de publier un outil qui sera facile à installer, régler et utiliser dans le futur.

Verdict

Puisque Flutter se compile en natif sur chaque plateforme cible, il est différent de la majorité des frameworks multiplateformes. Il ne perd pas en termes de performance comme les options qui utilisent les webviews ou ponts natifs (native bridges). Flutter n’a pas donc de freins sérieux à la performance.

Il apparait que Flutter (avec ces nouveautés) pourrait devenir une alternative viable à Electron, un framework permettant de développer des applications multiplateformes de bureau avec des technologies web (JavaScript, HTML et CSS). L'infrastructure (backend) est codée en node.js, et l'interface (frontend) est bâtie sur la base des outils Chromium, la partie open source de Google Chrome.

Plusieurs applications populaires comme Slack et Whatsapp Desktop ont été développées avec Electron. Il a permis aussi de développer les éditeurs de texte libres Atom de Github et Visual Studio Code de Microsoft.

Seulement, Electron est très gourmand en ressources (CPU et RAM), et certains développeurs accusent ses utilisateurs (développeurs JavaScript) de paresse, en refusant d’apprendre de vrais langages de programmation.

« Oui, Electron rend la vie facile aux développeurs au dépens des ressources des utilisateurs, autrement dit, c’est un développement pourri. »

Source : billet de blog(Norbert)

Et vous ?

Qu’en pensez-vous ?
Préférez-vous le développement multiplateforme ?
Si oui, quel est votre outil préféré : Flutter ? Electron ? Autre ?

Voir aussi

Google publie la Preview finale de Flutter, son SDK mobile Android et iOS, la dernière étape majeure avant la publication de la version stable 1.0
Quels sont vos environnements de développement intégrés (EDI) préférés en 2018 ? Et pourquoi ? Partagez vos avis
Le mode sombre d'Android permet-il d'économiser l'énergie de la batterie des smartphones ? Oui, confirme Google
Kotlin 1.3 est disponible : coroutines désormais stables, Kotlin/Native Beta, bibliothèques multiplateformes et bien plus encore
Vous avez lu gratuitement 3 articles depuis plus d'un an.
Soutenez le club developpez.com en souscrivant un abonnement pour que nous puissions continuer à vous proposer des publications.

Une erreur dans cette actualité ? Signalez-nous-la !

Avatar de Uther
Expert éminent sénior https://www.developpez.com
Le 08/05/2019 à 18:42
Donc ton Firefox fait lui aussi environ 200 Mo par onglet.
Donc le problème est bien là : Electron consomme autant qu'une appli Web alors qu'en théorie, il pourrait être bien plus léger.
2  0 
Avatar de smarlytomtom
Membre averti https://www.developpez.com
Le 08/05/2019 à 17:22
C'est une bonne nouvelle à mon goût ! J'espère qu'on commencera à mettre de côté toutes ses applications basées sur Electron qui mange notre mémoire ! Peut-être même les réécrire ?
Hâte de voir comment les développeurs vont l'accueillir .
0  0 
Avatar de blbird
Membre chevronné https://www.developpez.com
Le 08/05/2019 à 17:37
Citation Envoyé par smarlytomtom Voir le message
J'espère qu'on commencera à mettre de côté toutes ses applications basées sur Electron qui mange notre mémoire ! Peut-être même les réécrire ?.
Sur Windows 10, mon Discord prend moins de 220 Mo en mémoire. A côté, Firefox avec 5 onglets prend prêt de 1000 Mo. Je ne sais pas d'où sort cette idée qu'Electron est consommateur de mémoire plus que d'autres applications.
0  0 
Avatar de blbird
Membre chevronné https://www.developpez.com
Le 08/05/2019 à 19:00
Citation Envoyé par Uther Voir le message
Donc ton Firefox fait lui aussi environ 200 Mo par onglet.
Donc le problème est bien là : Electron consomme autant qu'une appli Web alors qu'en théorie, il pourrait être bien plus léger.
En fait c'est critiquer juste pour le plaisir ou bien? Mon Discord est ouvert avec 12 serveurs, soit 12 onglets. Skype est proche des 300 Mo alors qu'il n'est même pas ouvert. Chrome prend 420 Mo avec un pauvre onglet ouvert VIDE. Krita vide prend 250Mo de mémoire sans rien d'ouvert.

Et oui, Discord est une application très complète, qui ne consomme pas beaucoup en mémoire comparativement à la plupart des applications Windows actuelles équivalentes. Sa consommation mémoire n'a rien de déraisonnable du tout.

Je ne dit pas qu'elle pourrait ne pas être moindre, mais elle n'est clairement pas déraisonnable comme vous semblez chercher à le faire croire.
0  0 
Avatar de archqt
Membre émérite https://www.developpez.com
Le 08/05/2019 à 21:24
S'il pouvait faire en sorte
  • que l'on puisse l'utiliser en C++ ce serait encore mieux
  • Et un langage de description d'interface plutôt que du code (style QML pourquoi pas, j'aime bien le format JSON pour cela)


Je n'ai rien contre Dart mais disons que cela permettrait de rassembler encore plus de monde autour de ce projet.

PS Je sais qu'il y a un "pluging" pour pouvoir se greffer sur un noyau C++ mais c'est dommage d'avoir un truc codé en C++ (Skia) et ensuite de ne pas pouvoir facilement utiliser le langage de base de la bibliothèque graphique.
0  0 
Avatar de Jiai972
Membre du Club https://www.developpez.com
Le 09/05/2019 à 9:42
Je comprends l'attrait en performances de C++, mais je ne vois pas vraiment en quoi cela populariserait plus Flutter.
Typiquement moi je ne m'y serais pas interessé si c'était du C++, à cause de la complexité de la gestion de la mémoire.

De plus, une des options les plus mises en avant de Flutter est d'offrir des options de modifications du code à la volée en mode debug, et je ne suis pas certain que celà puisse être appliqué avec du C++.
0  0 
Avatar de archqt
Membre émérite https://www.developpez.com
Le 09/05/2019 à 15:35
Citation Envoyé par Jiai972 Voir le message
Je comprends l'attrait en performances de C++, mais je ne vois pas vraiment en quoi cela populariserait plus Flutter.
Typiquement moi je ne m'y serais pas interessé si c'était du C++, à cause de la complexité de la gestion de la mémoire.
En utilisant les "smart pointers" ce n'est pas un soucis puisque l'on délègue la gestion de la mémoire à un objet, qui supprimera celle-ci une fois tous les objets accédant à la mémoire disparus.

De plus, une des options les plus mises en avant de Flutter est d'offrir des options de modifications du code à la volée en mode debug, et je ne suis pas certain que celà puisse être appliqué avec du C++.
C'est un avantage indéniable. Mais il faudrait voir si cling permet de compenser cela et de faire la même chose

L'intérêt du C++ est
  • performance certes car Dart est jusque 10 fois plus lent, et je suis large, que C++ (pire que Java)
  • tous ceux qui, comme moi utilisent Qt en C++ ne vont pas forcément faire la bascule pour passer en Dart
  • utilisation des bibliothèques de la STL
  • gain de taille de l'application (pas besoin de la Dart VM)
0  0 
Avatar de AoCannaille
Expert confirmé https://www.developpez.com
Le 09/05/2019 à 17:15
Citation Envoyé par archqt Voir le message

  • performance certes car Dart est jusque 10 fois plus lent, et je suis large, que C++ (pire que Java)
  • tous ceux qui, comme moi utilisent Qt en C++ ne vont pas forcément faire la bascule pour passer en Dart
  • utilisation des bibliothèques de la STL
  • gain de taille de l'application (pas besoin de la Dart VM)
J'ajouterais :
  • Portabilité : N'importe quel processeur à un compilateur C/C++ disponible.
0  0 
Avatar de Jiai972
Membre du Club https://www.developpez.com
Le 10/05/2019 à 11:02
Citation Envoyé par archqt Voir le message
En utilisant les "smart pointers" ce n'est pas un soucis puisque l'on délègue la gestion de la mémoire à un objet, qui supprimera celle-ci une fois tous les objets accédant à la mémoire disparus.

C'est un avantage indéniable. Mais il faudrait voir si cling permet de compenser cela et de faire la même chose

L'intérêt du C++ est
  • performance certes car Dart est jusque 10 fois plus lent, et je suis large, que C++ (pire que Java)
  • tous ceux qui, comme moi utilisent Qt en C++ ne vont pas forcément faire la bascule pour passer en Dart
  • utilisation des bibliothèques de la STL
  • gain de taille de l'application (pas besoin de la Dart VM)
Sauf erreur de ma part, le code final est compilé, donc les problèmatiques de performances et de taille de l'application sont liées à Flutter lui même, pas à Dart
https://flutter.dev/docs/resources/f...ter-built-with
Je prend note cependant de l'argument pour la STL.

Citation Envoyé par AoCannaille Voir le message
J'ajouterais :
  • Portabilité : N'importe quel processeur à un compilateur C/C++ disponible.
Je ne suis pas certain de voir l’argument de la portabilité universelle de C++ dans le cadre de Flutter.
0  0 
Avatar de smarlytomtom
Membre averti https://www.developpez.com
Le 10/05/2019 à 11:50
Citation Envoyé par Uther Voir le message
Donc ton Firefox fait lui aussi environ 200 Mo par onglet.
Donc le problème est bien là : Electron consomme autant qu'une appli Web alors qu'en théorie, il pourrait être bien plus léger.
Je te rejoins sur ce point ! Quel est l'intérêt d'avoir une application standalone si il n'y a pas ou très peu d'avantages ? Autant rester sur le service online...
Le véritable atout d'une application de bureau est d'être normalement moins gourmande en ressources. Hors dans le cas des applications electron on fait tourner une instance de navigateur avec son moteur de rendu et son moteur JS v8.
0  0