Le framework de développement Flutter de Google a finalement réalisé ses aspirations multiplateformes avec une version stable de la prise en charge de Linux et macOS. Flutter 3.0, annoncé lors de la conférence des développeurs I/O de Google, offre aux développeurs un moyen d'écrire des applications pour les six principales cibles de plateforme destinées aux consommateurs à l'aide du langage de programmation Dart. Sans parler des appareils embarqués.
« Nous annonçons Flutter 3, qui est l'aboutissement de notre parcours vers le développement d'interfaces utilisateur multiplateformes sur téléphone, ordinateur de bureau et Web », a déclaré Tim Sneath, directeur des produits et de l'expérience utilisateur pour Flutter et Dart. « Le moment où nous avons lancé Flutter il y a quelques années remonte vraiment. Avec le lancement de Flutter 1, nous étions assez clairs, du moins en termes de vision, même à ce moment-là, que nous n'avions pas l'intention d'être une boîte à outils mobile. Nous voulions être considérés comme étant plus larges qu'une boîte à outils qui cible uniquement les téléphones ».
« Avec Flutter 2.0, nous avons fourni un support Web et, tout récemment, nous avons fourni un support pour Windows », a déclaré Tim Sneatht. « Et maintenant, avec Flutter 3.0, nous avons finalement atteint le point où nous avons terminé ce voyage. Nous avons les six principales plateformes - iOS, Android, Web, Windows, macOS, Linux - toutes prises en charge en tant que parties stables du framework Flutter ».
Avec la version Flutter 3, la plateforme prend donc désormais en charge les applications iOS, Android et Web, ainsi que les applications de bureau Windows, macOS et Linux, le tout dans le cadre de la version stable de Flutter. Sur macOS, cela inclut la prise en charge des binaires universels afin que les applications puissent s'exécuter en mode natif sur les puces Intel et Apple Silicon, tandis que pour la version Linux, Google s'est associé à Canonical d'Ubuntu pour « offrir une option de développement hautement intégrée et de pointe ».
La prise en charge de Linux et macOS était auparavant considérée comme étant en version bêta et donc pas particulièrement adaptée aux applications de production. Maintenant que Material Design 3 de Google est presque terminé, ceux qui cherchent à créer des interfaces utilisateur multiplateformes dans l'idiome Android peuvent compter sur une boîte à outils esthétiquement cohérente.
Malgré la prise en charge des ordinateurs de bureau, la plupart des développeurs considèrent probablement Flutter comme un framework pour créer des applications mobiles. Mais un certain nombre de développeurs l'utilisent également activement pour créer des applications de bureau, y compris les anciens fondateurs de Wunderlist qui ont lancé leur nouvelle application de productivité, Superlist, en version bêta en tant qu'application Flutter sur desktop.
Autre nouveauté de Flutter 3, des intégrations plus approfondies avec Firebase, la plateforme back-end de Google pour la création d'applications mobiles et Web. Cela n'enlève rien aux intégrations de Flutter avec des services tiers, y compris le concurrent de Firebase AWS Amplify. Mais comme le note l'équipe Flutter, l'intégration Flutter/Firebase est désormais un élément central entièrement pris en charge de Firebase et les deux équipes prévoient de faire évoluer « la prise en charge de Firebase pour Flutter en parallèle avec Android et iOS ».
« Seulement » 23 000 packages dans l'écosystème Flutter
Interrogé sur le nombre relativement restreint de packages disponibles pour les développeurs Flutter, Sneath a déclaré que la communauté Flutter s'était mobilisée pour combler le vide, individuellement et au niveau de l'entreprise.
« Des entreprises comme Microsoft et Amazon écrivent des plugins, et les communautés commencent à se regrouper et à mettre en commun leurs ressources autour de packages communs que d'autres utilisent ou veulent voir », a-t-il déclaré. « Nous avons maintenant plus de 23 000 packages dans l'écosystème Flutter et cela augmente rapidement, à la fois en nombre et en qualité de ces packages ».
L'aspect le plus important de la version 3.0 est sans doute la décision de Google de soutenir le développement de jeux occasionnels via son Casual Games Toolkit, une sélection de modèles et de meilleures pratiques, ainsi que des crédits pour les publicités et les services cloud. L'équipe Flutter de Google n'a pas encore essayé de répondre aux besoins des développeurs de jeux, bien que des efforts dans ce sens aient été faits par des tiers, notamment via le moteur de jeu Flame, qui a atteint son cap 1.0 en décembre dernier.
Sneath a déclaré que Flame visait un type de jeu plus exigeant que le Casual Games Toolkit : « Une grande partie de ce que nous essayons d'offrir dans le Casual Games Toolkit est complémentaire à Flame », a-t-il déclaré, soulignant des tâches telles que l'intégration avec le Game Center d'Apple ou les services de jeux Google Play.
« Les développeurs de jeux pourraient être intéressés par des choses comme les microtransactions ou les achats intégrés », a expliqué Sneath. « Ils pourraient avoir besoin d'écrans de démarrage, de classements et de choses comme ça. Donc, une grande partie de ce que nous faisons est d'essayer de fournir ces pièces qui se trouvent autour du moteur de jeu de base et de laisser les incroyables gens de Flame pouvoir continuer à construire ce noyau de moteur de jeu ».
Prêt pour la production sur toutes les plateformes de bureau
Linux et macOS sont devenus stables et incluent les fonctionnalités suivantes :
Menus en cascade et prise en charge de la barre de menus du système macOS
Vous pouvez désormais créer des barres de menus rendues par la plateforme sur macOS à l'aide du widget PlatformMenuBar, qui prend en charge l'insertion de menus de plateforme uniquement et contrôle ce qui apparaît dans les menus de l'application macOS.
Prise en charge complète de la saisie de texte internationale sur toutes les plateformes de bureau
La saisie de texte internationale, y compris pour les langues qui utilisent des éditeurs de méthode de saisie de texte (IME) telles que le chinois, le japonais et le coréen, est entièrement prise en charge sur les trois plateformes de bureau, y compris les méthodes de saisie tierces telles que Sogou et Google Japanese Input.
Accessibilité sur toutes les plateformes de bureau
Flutter pour Windows, macOS et Linux prennent en charge les services d'accessibilité tels que les lecteurs d'écran, la navigation accessible et les couleurs inversées.
Binaires universels par défaut sur macOS
Depuis Flutter 3, les applications de bureau Flutter macOS sont conçues comme des binaires universels, avec une prise en charge native des Mac Intel existants et des derniers appareils Apple Silicon d'Apple.
Dépréciation de Windows 7/8 pour le développement
Avec cette version, l'équipe a élevé la version Windows recommandée pour le développement vers Windows 10. Bien qu'elle ne bloque pas le développement sur les anciennes versions (Windows 7, Windows 8, Windows 8.1), ces versions ne sont plus prises en charge par Microsoft et l'équipe fournit des tests limités sur ces versions. Bien qu'elle continue d'offrir une assistance « au mieux » pour les anciennes versions, elle encourage à effectuer la mise à niveau. Et de préciser que : « Nous continuons à offrir une assistance pour les applications Flutter exécutées sur Windows 7 et Windows 8 ; cette modification n'affecte que l'environnement de développement recommandé ».
Mises à jour mobiles
Les mises à jour des plateformes mobiles comprennent les éléments suivants :
Support de téléphone pliable
La version Flutter 3 prend en charge les appareils mobiles pliables. Dans une collaboration dirigée par Microsoft, de nouvelles fonctionnalités et widgets vous permettent de créer des expériences dynamiques et agréables sur des appareils pliables.
Dans le cadre de ce travail, MediaQuery contient désormais une liste de DisplayFeatures, décrivant les limites et les états des éléments de l'appareil tels que les charnières, les plis et les découpes. De plus, le widget DisplayFeatureSubScreen positionne désormais son widget enfant sans chevaucher les limites de DisplayFeatures, et a déjà été intégré aux boîtes de dialogue et aux fenêtres contextuelles par défaut du framework, rendant Flutter conscient et réactif à ces éléments prêts à l'emploi.
Prise en charge du taux de rafraîchissement variable iOS
Flutter prend désormais en charge le taux de rafraîchissement variable sur les appareils iOS avec écrans ProMotion, y compris l'iPhone 13 Pro et l'iPad Pro. Sur ces appareils, les applications Flutter peuvent rendre à des taux de rafraîchissement atteignant 120 Hz, qui étaient auparavant limités à 60 Hz. Cela se traduit par une expérience plus fluide lors d'animations rapides telles que le défilement.
Versions iOS simplifiées
L'équipe a ajouté de nouvelles options à la commande flutter build ipa pour simplifier la publication de votre application iOS. Lorsque vous êtes prêt à distribuer sur TestFlight ou l'App Store, exécutez flutter build ipa pour créer une archive Xcode (fichier .xcarchive) et un ensemble d'applications (fichier .ipa). Vous pouvez éventuellement ajouter —-export-method ad hoc, —-export-method development ou —-export-method enterprise. Une fois le bundle d'applications créé, téléchargez-le sur Apple via l'application macOS Apple Transport ou sur la ligne de commande à l'aide de xcrun altool (exécutez man altool pour les instructions d'authentification de la clef d'API App Store Connect). Après le téléchargement, votre application est disponible pour être publiée sur TestFlight ou sur l'App Store. Après avoir configuré les paramètres initiaux de votre projet Xcode, tels que le nom d'affichage et l'icône de l'application, vous n'avez plus besoin d'ouvrir Xcode pour publier votre application.
Mise à jour de la version Gradle
Si vous créez un nouveau projet avec l'outil Flutter, vous remarquerez peut-être que les fichiers générés utilisent désormais les dernières versions des plugins Gradle et Android Gradle. Pour les projets existants, vous devez passer manuellement les versions à 7.4 pour Gradle et à 7.1.2 pour le plugin Android Gradle.
Mises à jour Web
Les mises à jour pour les applications Web incluent les éléments suivants :
Décodage d'images
Flutter Web détecte et utilise désormais automatiquement l'API ImageDecoder dans les navigateurs qui la prennent en charge. À ce jour, la plupart des navigateurs basés sur Chromium (Chrome, Edge, Opera, Samsung Browser, etc.) ont ajouté cette API.
La nouvelle API décode les images de manière asynchrone à partir du thread principal à l'aide des codecs d'image intégrés du navigateur. Cela accélère le décodage des images de 2x et ne bloque jamais le thread principal, supprimant tout le jank qui était auparavant causé par les images.
Cycles de vie des applications Web
La nouvelle API de cycle de vie pour les applications Web Flutter vous offre la possibilité de contrôler le processus d'amorçage de votre application Flutter à partir de la page HTML d'hébergement et aide Lighthouse à analyser les performances de votre application. Cela s'applique à de nombreux cas d'utilisation, y compris les scénarios fréquemment demandés suivants :
- un écran de démarrage ;
- un indicateur de charge ;
- une page de destination interactive HTML simple affichée avant l'application Flutter.
Mises à jour de l'outillage
Les mises à jour des outils Flutter et Dart incluent :
Mise à jour des packages lint
La version 2.0 des packages lint a été publiée.
Les applications générées dans Flutter 3 avec Flutter Create activent automatiquement les ensembles v2.0 de lints. Les applications, packages et plugins existants sont encouragés à migrer vers la v2.0 pour suivre les pratiques les plus récentes et les meilleures dans le monde Flutter, en exécutant flutter pub upgrade --major-versions flutter_lints.
La plupart des avertissements de lint nouvellement ajoutés dans la v2 sont accompagnés de correctifs automatisés. Ainsi, après la mise à niveau vers la dernière version du package dans le fichier pubspec.yaml de votre application, vous pouvez exécuter dart fix --apply sur votre base de code pour corriger automatiquement la plupart des avertissements de charpie (certains avertissements nécessitent encore un travail manuel). Les applications, packages ou plugins qui n'utilisent pas encore package:flutter_lints peuvent migrer en suivant le guide de migration.
Amélioration des performances
Grâce au contributeur open source knopp, le repaint partiel a été activé sur les appareils Android qui le prennent en charge. Lors des tests locaux de l'équipe, ce changement a réduit de 5 fois les temps de rastérisation des images au 90e centile et au 99e centile sur le benchmark background_filter_perf sur un appareil Pixel 4 XL. La repeinture partielle lorsqu'il y a une seule zone sale rectangulaire est désormais activée sur les appareils iOS et Android plus récents.
L'équipe a encore amélioré les performances des animations d'opacité dans des cas simples. En particulier, lorsqu'un widget Opacity ne contient qu'une seule primitive de rendu, la méthode saveLayer qui est généralement invoquée par Opacity est omise. Dans un benchmark construit pour mesurer les avantages de cette optimisation, le temps de tramage pour ce cas s'est amélioré d'un ordre de grandeur. Dans les prochaines versions, l'équipe prévoit d'appliquer cette optimisation à encore plus de scénarios.
Sources : Flutter, Keynote Google I/O (vidéo dans le texte)
Et vous ?
Que pensez-vous de Flutter dans l'absolu ?
L'avez-vous déjà utilisé ? Sinon, avez-vous utilisé un outil similaire ? Lequel ?
Que pensez-vous des améliorations apportées par Flutter 3.0 ? Lesquelles vous semblent les plus intéressantes ?