Exploration des Mises à Jour Techniques de Flutter 3.16

Évolutions du Framework

Material 3 comme Thème par Défaut

La bibliothèque Material a été mise à jour pour s'aligner sur les spécifications Material Design les plus récentes. Cette transition introduit de nouveaux composants, des thèmes redéfinis et des améliorations visuelles. Auparavant activé via un flag, Material 3 est désormais le standard par défaut. Bien qu'il soit encore possible de revenir à Material 2, cette ancienne version sera progressivement obsolète. Les développeurs sont encouragés à migrer manuellement leurs widgets, comme la NavigationBar, pour assurer une compatibilité optimale. La génération de palettes de couleurs peut se faire via ColorScheme.fromSeed() ou ColorScheme.fromImageProvider, garantissant ainsi des contrastes accessibles et esthétiques.

Animations et Interactions Material 3

Les animations ont été enrichies avec l'ajout des classes Easing et Durations, remplaçant les anciennes courbes de Material 2. Sur iOS, le menu d'édition natif propose désormais des options de recherche et de partage. Pour l'accessibilité, la classe TextScaler remplace textScaleFactor afin de supporter le redimensionnement non linéaire des polices sur Android 14.

Le widget SelectionArea a été optimisé pour gérer les interactions natives, permettant la sélection par simple clic, double-clic ou appui long. De plus, la gestion du focus a été améliorée pour restaurer l'état précédent lors de l'interaction avec des éléments de menu, et les raccourcis clavier sur macOS et iOS sont désormais triés automatiquement selon les directives d'Apple.

Nouveaux Widgets et Tests

Le widget MatrixTransition permet d'appliquer des transformations matricielles lors des animations. Pour les tests unitaires, la classe PaintPattern a été intégrée dans flutter_test, facilitant la vérification des dessins sur le canvas sans recourir aux fichiers golden.

Exemple de validation de dessins personnalisés :


void verifyCustomPainting() {
  expect(
    find.byType(CustomCanvasWidget),
    paints
      ..rect(
        rect: const Rect.fromLTWH(15.0, 25.0, 100.0, 50.0),
        color: const Color(0xFF2196F3),
      )
      ..paragraph(
        offset: const Offset(20.0, 30.0),
      ),
  );
}

Améliorations du Défilement 2D

Les bases du défilement bidimensionnel supportent désormais les widgets KeepAlive, la traversée du focus et le défilement implicite. Le package two_dimensional_scrollables continue d'évoluer avec le widget TableView, offrant plus d'options de stylisation et de décoration.

Avancées du Moteur et Impeller

Impeller sur Android (Aperçu Vulkan)

Le moteur de rendu Impeller est désormais disponible en aperçu sur Android pour les appareils supportant Vulkan. Cette version vise à collecter des retours sur les performances et la réduction des micro-saccades. Pour les appareils ne supportant pas Vulkan, un backend OpenGL est en cours de développement.

Pour activer Impeller sur un appareil compatible, vous pouvez modifier le manifeste Android :


<application ...>
    <meta-data
        android:name="io.flutter.embedding.android.EnableImpeller"
        android:value="true" />
</application>

Il est important de noter que les Platform Views et les shaders personnalisés ne sont pas encore totalement supportés dans cette phase de prévisualisation. Les tests de performance doivent être effectués en mode profil ou release, en comparant les résultats avec le backend Skia.

Optimisations Globales du Moteur

Des améliorations significatives ont été apportées à la gestion du texte et à l'allocation des threads sur les architectures hétérogènes, permettant une meilleure utilisation des cœurs de performance. Cela se traduit par une réduction notable des temps de rendu des frames. De plus, le dithering est maintenant activé par défaut pour éliminer les bandes de couleur dans les dégradés, et l'overlay de performance s'affiche correctement lorsque Impeller est actif.

Outils pour le Développement de Jeux

Le kit de développement pour jeux occasionnels a été enrichi. Il propose désormais de nouveaux templates et des intégrations facilitées pour les services Google Play, les achats in-app, la publicité, les achievements et le multijoueur.

Spécificités des Plateformes

Web et Android

Sur le Web, les événements de la timeline Flutter sont maintenant visibles directement dans l'onglet Performance de Chrome DevTools. Sur Android, le défilement à la molette a été calibré pour correspondre aux vitesses natives, et le geste de retour prédictif d'Android 14 est désormais pris en charge, permettant une transition visuelle fluide vers l'écran d'accueil.

iOS et Extensions

Flutter peut désormais être utilisé pour créer certaines extensions d'applications iOS, permettant de dessiner des interfaces avec des widgets Flutter pour des extensions spécifiques, comme le partage, bien que des limitations de mémoire puissent s'appliquer pour d'autres types comme les widgets d'écran d'accueil.

Écosystème des Packages et DevTools

Mises à Jour des Packages Populaires

Le programme Flutter Favorite a été relancé, mettant en avant des packages essentiels. Parmi les améliorations notables :

  • Google Maps : Support des styles de cartes basés sur le Cloud, permettant de lier un style directement via un identifiant sans modifier le code.
  • CameraX : L'intégration de CameraX pour Android est améliorée, résolvant de nombreux problèmes de l'ancienne implémentation Camera2.
  • Video Player : Ajout du support pour macOS, permettant la lecture vidéo directement dans un widget.

Exemple d'utilisation de l'identifiant Cloud pour Google Maps :


GoogleMap(
  onMapCreated: _handleMapInitialization,
  initialCameraPosition: const CameraPosition(
    target: LatLng(48.8566, 2.3522),
    zoom: 12.5,
  ),
  cloudMapId: _cloudMapIdentifier,
)

Configuration de CameraX dans le pubspec.yaml :


dependencies:
  camera: ^0.11.0
  camera_android_camerax: ^0.6.0

Extensions DevTools et VS Code

Le framework d'extensions DevTools permet aux auteurs de packages de créer des outils de débogage personnalisés directement intégrés à l'interface. Des extensions pour Provider, Drift et Patrol sont déjà disponibles. L'extension VS Code pour Flutter a également été améliorée avec une nouvelle barre latérale offrant un accès rapide aux appareils, aux sessions de débogage et aux commandes DevTools.

Modifications Majeures et Obsolescences

Cette version introduit la suppression de plusieurs API obsolètes depuis la version 3.13. Les outils de migration automatique, tels que dart fix, sont disponibles pour faciliter la transition. La politique d'obsolescence sera prochainement étendue au package flutter_driver.

Étiquettes: Flutter Material3 Impeller DevTools Dart

Publié le 18 juin à 22h19