Novedades de Flutter 3

Sumérgete en nuestra última versión, que incluye macOS y Linux estable, mejoras de rendimiento y mucho más.

Nuevamente, es hora de disfrutar de una versión estable de Flutter ¡y nos enorgullece enormemente anunciar el lanzamiento de Flutter 3! Hace solo tres meses, anunciamos la compatibilidad de Flutter con Windows. ¡Hoy, nos complace anunciar que Flutter ahora es estable para macOS y Linux, además de Windows!

Gracias al arduo trabajo de nuestros colaboradores de Flutter, combinamos 5248 solicitudes de extracción.

Tenemos varias cosas emocionantes que anunciar como parte de esta versión, incluida la actualización de la compatibilidad de Flutter con macOS y Linux, mejoras significativas en el rendimiento, actualizaciones para dispositivos móviles y la Web, ¡y mucho más! Además, tenemos noticias sobre la reducción de la compatibilidad con versiones anteriores de Windows y una breve lista de cambios rotundos. Así que, ¡pongámonos a trabajar!

Listo para la producción en todas las plataformas de escritorio

Menús en cascada y compatibilidad con la barra de menú del sistema macOS

Las barras de menú renderizadas por la plataforma ahora se pueden compilar en macOS usando el widget PlatformMenuBar, que admite la inserción de menús exclusivos de la plataforma y controla lo que aparece en los menús de la app para macOS.

Compatibilidad completa para la entrada de texto internacional en todas las plataformas de escritorio

La entrada de texto internacional, incluidos los idiomas que utilizan editores de métodos de entrada de texto (IME), como chino, japonés y coreano, es completamente compatible con las tres plataformas de escritorio, incluidos los métodos de entrada de terceros, como Sogou y Google Japanese Input.

Accesibilidad en todas las plataformas de escritorio

Flutter para Windows, macOS y Linux es compatible con servicios de accesibilidad, como lectores de pantalla, navegación accesible y colores invertidos.

Binarios universales de forma predeterminada en macOS

A partir del lanzamiento de Flutter 3, las apps de escritorio de Flutter para macOS se compilan como archivos binarios universales, con compatibilidad nativa tanto con las Mac basadas en Intel existentes como con los últimos dispositivos Apple Silicon de Apple.

Obsolescencia de Windows 7 y 8 para el desarrollo

Con esta versión, elevamos la versión de Windows recomendada para el desarrollo a Windows 10. Aunque no bloquearemos el desarrollo en versiones anteriores (Windows 7, Windows 8, Windows 8.1), estas versiones ya no son compatibles con Microsoft y brindamos pruebas limitadas en ellas. Si bien continuaremos ofreciendo compatibilidad de “mejor esfuerzo” para versiones anteriores, te alentamos a que te actualices. 

Nota: Seguimos ofreciendo compatibilidad para las apps de Flutter que se ejecutan en Windows 7, por lo que este cambio solo afecta al entorno de desarrollo recomendado.

Actualizaciones para dispositivos móviles

Compatibilidad con dispositivos plegables

La versión de Flutter 3 es compatible con los dispositivos móviles plegables. En una colaboración liderada por Microsoft, las nuevas funciones y widgets te permiten compilar experiencias dinámicas y agradables en dispositivos plegables.

Como parte de este trabajo, MediaQuery ahora contiene una lista de DisplayFeatures, que describe los límites y estados de los elementos del dispositivo, como bisagras, pliegues y cortes. Además, el widget DisplayFeatureSubScreen ahora posiciona su widget secundario sin superponer los límites de DisplayFeatures y ya se integró con los diálogos predeterminados y ventanas emergentes del marco de trabajo, lo que hace que Flutter sea consciente y responda a estos elementos desde el principio.

¡Muchas gracias al equipo de Microsoft y especialmente a @andreidiaconu por sus contribuciones! 

Prueba las muestras del emulador de Surface Duo, incluida una con una bifurcación especial de la galería de Flutter, para ver las pantallas duales de Flutter en acción.

Compatibilidad con la frecuencia de actualización variable de iOS

Flutter ahora es compatible con la frecuencia de actualización en dispositivos iOS con pantallas ProMotion, incluidos iPhone 13 Pro y iPad Pro. En estos dispositivos, las apps de Flutter pueden renderizar a frecuencias de actualización que alcanzan los 120 Hz, mientras que antes estaban limitadas a 60 Hz. Así, se obtiene una experiencia más fluida durante animaciones rápidas, como el desplazamiento. Consulta flutter.dev/go/variable-refresh-rate para obtener más información.

Versiones simplificadas para iOS

Agregamos nuevas opciones al comando flutter build ipa para simplificar el lanzamiento de tu app para iOS.  Cuando tengas todo listo para distribuir tu app a TestFlight o a la tienda de apps, ejecuta flutter build ipa para compilar un archivo Xcode (archivo .xcarchive) y un paquete de apps (archivo .ipa).  Como alternativa, puedes agregar –export-method ad-hoc, –export-method development o –export-method enterprise.  Una vez que se compila el paquete de apps, cárgalo en Apple a través de la app de macOS Apple Transport o en la línea de comandos con xcrun altool (ejecuta man altool para obtener más instrucciones de autenticación de la clave de API de App Store Connect). Después de la carga, tu app está disponible para lanzarla a TestFlight o la tienda de apps. Luego de ajustar la configuración inicial del proyecto Xcode, como el nombre visible y el ícono de la app, ya no necesitas abrir Xcode para lanzar tu app.

Actualización de la versión de Gradle

Si compilas un nuevo proyecto con la herramienta Flutter, probablemente notarás que los archivos generados ahora usan las últimas versiones de los complementos de Gradle y de Gradle para Android. Para los proyectos existentes, debes transmitir manualmente las versiones a 7.4 para Gradle y 7.1.2 para el complemento de Gradle para Android.

Fin de la compatibilidad con iOS de 32 bits, iOS 9 e iOS 10

Como anunciamos en febrero de 2022 con la versión estable 2.10, la compatibilidad de Flutter para dispositivos iOS de 32 bits y las versiones 9 y 10 de iOS está llegando a su fin. Este cambio afecta a los dispositivos iPhone 4S, iPhone 5, iPhone 5C y iPad de segunda, tercera y cuarta generación. Flutter 3 es la última versión estable compatible con estas versiones y dispositivos de iOS.

Para obtener más información sobre este cambio, consulta RFC: fin de la compatibilidad para dispositivos iOS de 32 bits.

Actualizaciones para la Web

Decodificación de imágenes

La versión web de Flutter ahora detecta y usa automáticamente la API ImageDecoder en los navegadores compatibles. A partir de hoy, la mayoría de los navegadores basados en Chromium (Chrome, Edge, Opera, Samsung Browser y muchos más) cuentan con esta API.

La nueva API decodifica imágenes de forma asíncrona fuera del subproceso principal utilizando los códecs de imágenes integrados del navegador. Así, se duplica la velocidad de decodificación de imágenes, nunca se bloquea el subproceso principal y se eliminan todos los bloqueos que antes causaban las imágenes.

Ciclos de vida de la app web

La nueva API de ciclo de vida para las apps web de Flutter te brinda la flexibilidad de controlar el proceso de arranque de tu app de Flutter desde la página HTML de alojamiento y le permite a Lighthouse analizar el rendimiento de tu app. Esto se aplica a muchos casos de uso, incluidos los siguientes escenarios solicitados con frecuencia:

  • Una pantalla de presentación.

  • Un indicador de carga.

  • Una página de destino interactiva HTML simple que se muestra antes de la app de Flutter.

Actualizaciones de herramientas

Paquete de lint actualizado 

Se lanzó la versión 2.0 de los paquetes de lint:

https://pub.dev/packages/flutter_lints/versions/2.0.0 

https://pub.dev/packages/lints/versions/2.0.0

Las apps generadas en Flutter 3 con flutter create habilitan automáticamente los conjuntos de lint versión 2.0. Se recomienda migrar las apps, los paquetes y los complementos existentes a la versión 2.0 para seguir las prácticas recomendadas más recientes en el mundo de Flutter. Para ello, debes ejecutar flutter pub upgrade –major-versions flutter_lints. 

La mayoría de las advertencias de lint recién agregadas en la versión 2 incluyen correcciones automáticas. De esta manera, después de actualizar a la última versión del paquete en el pubspec.yaml de tu app, puedes ejecutar dart fix –apply sobre tu base de código para corregir la mayoría de las advertencias de lint automáticamente (algunas advertencias aún requieren un trabajo manual). Apps, paquetes o complementos que no usan package:flutter_lints aún se recomienda realizar la migración siguiendo la guía de migración para aprovechar las prácticas recomendadas más recientes.

Mejoras de rendimiento

Gracias al colaborador de código abierto knopp, se habilitó la repetición de dibujo parcial en los dispositivos Android compatibles. En nuestras pruebas locales, este cambio redujo 5 veces los tiempos de rasterización de fotogramas promedio un 90% y 99% en la comparativa backdrop_filter_perf en un dispositivo Pixel 4 XL. La repetición de dibujo parcial cuando hay una sola región no sincronizada rectangular ahora está habilitada en los dispositivos iOS y en los dispositivos Android más nuevos.

Mejoramos aún más el rendimiento de las animaciones de opacidad en casos simples. En concreto, cuando un widget `Opacity` contiene solo una primitiva de renderización, se omite el método `saveLayer` que normalmente invoca el widget `Opacity`. En una comparativa realizada para medir los beneficios de esta optimización, el tiempo de rasterización para este caso mejoró en un orden de magnitud. En versiones futuras, planeamos aplicar esta optimización a incluso más escenarios. 

Gracias al trabajo del colaborador de código abierto JsouLiang, los subprocesos de IU y la trama del motor ahora se ejecutan con mayor prioridad en Android e iOS que en otros subprocesos. Por ejemplo, subprocesos de recolección de elementos no utilizados en segundo plano de Dart VM. En nuestras comparativas, esto resultó en un tiempo de compilación de fotograma promedio ~ 20% más rápido.

Antes de la versión 3, la política de admisión para el caché de trama solo tenía en cuenta la cantidad de operaciones de dibujo en una imagen y asumía que cualquiera con más de unas pocas operaciones sería un buen candidato para el almacenamiento en caché. Lamentablemente, esto hizo que el motor gastara memoria para almacenar en caché imágenes que en realidad se podían renderizar muy rápido. Esta versión presenta un mecanismo que estima la complejidad de renderización de las imágenes en función del costo de las operaciones de dibujo que contiene. Su uso como política de admisión de caché de trama redujo el uso de memoria sin disminuir el rendimiento en nuestras comparativas.

Le agradecemos al colaborador de código abierto ColdPaleLight, quien solucionó un error en la programación del fotograma que causaba que disminuyera levemente la cantidad de fotogramas de animación en iOS. Gracias a todas las personas que informaron este problema y brindaron reproducciones y videos de los fotogramas disminuidos.

Impeller

El equipo trabajó arduamente para encontrar una solución al bloqueo de inicio temprano en iOS y otras plataformas. En la versión Flutter 3, puedes obtener una vista previa de un backend de renderización experimental denominado Impeller en iOS. Impeller compila previamente un conjunto de sombreadores más pequeño y simple en el tiempo de compilación del motor para que no se compilen mientras se ejecuta una app. Esta fue una fuente importante de bloqueo en Flutter. Impeller no está listo para la producción y aún falta mucho para terminarlo. No todas las funciones de Flutter están implementadas todavía, pero estamos muy satisfechos con la fidelidad y el rendimiento en la app de Flutter o Galería como para compartir nuestro progreso. En particular, el peor fotograma en la animación de transición de la app de Galería es aproximadamente 20 veces más rápido.

Impeller está disponible bajo una función experimental en iOS. Puedes pasar la función experimental `–enable-impeller` a `flutter run`, o establecer la función experimental `FLTEnableImpeller` en tu archivo `Info.plist` a `true`, para probar Impeller. El desarrollo de Impeller continúa en el canal principal de Flutter y esperamos brindar más actualizaciones en las próximas versiones.

Anuncios integrados en Android

Cuando utilices el paquete google-mobile-ads, deberías observar un mejor rendimiento en las interacciones críticas del usuario, como el desplazamiento y las transiciones entre páginas. Esto es más notable en los dispositivos populares en los mercados emergentes. ¡Lo mejor de todo es que no se requieren cambios de código!

A nivel profundo, Flutter ahora compone vistas de Android, comúnmente conocidas como vistas de plataforma, de forma asíncrona. Esto significa que el subproceso de trama de Flutter no necesita esperar a que se renderice la vista de Android. En cambio, el motor de Flutter coloca la vista en la pantalla con una textura OpenGL que administra.

Más actualizaciones emocionantes

Material 3

Flutter 3 es compatible con Material Design 3, la siguiente generación de Material Design. Flutter 3 brinda compatibilidad opcional con Material 3. Se incluyen funciones de Material You como color dinámico, un sistema de color y tipografía actualizados, actualizaciones de muchos componentes y nuevos efectos visuales introducidos en Android 12 como un nuevo diseño de ondulación táctil y un efecto de desplazamiento de extensión. Prueba las funciones de Material 3 en el nuevo codelab Convierte a tu aburrida app de Flutter en una app increíble. Consulta los documentos de API para obtener más detalles sobre cómo optar por estas nuevas funciones y qué componentes son compatibles con Material 3. Sigue el trabajo continuo con el problema principal de Material 3.

Extensiones de tema

Flutter ahora permite agregar cualquier cosa a ThemeData de la biblioteca de Material, con un concepto llamado “Extensiones de tema”. En lugar de extender (en cuanto a Dart) ThemeData y volver a implementar copyWith, lerp y otros métodos, puedes especificar ThemeData.extensions. Además, como desarrollador de paquetes, puedes proporcionar ThemeExtensions. Consulta flutter.dev/go/theme-extensions para obtener más información y mira este ejemplo en GitHub.

Anuncios

Sabemos que es importante que los publicadores soliciten el consentimiento para anuncios personalizados y controlen los requisitos de App Tracking Transparency (ATT) de Apple.

Para ofrecer compatibilidad con estos requisitos, desde Google se ofrece el SDK de User Messaging Platform (UMP), que reemplaza al anterior SDK de código abierto Consent SDK. En la próxima versión del SDK de GMA para Flutter, agregaremos compatibilidad con el SDK de UMP para permitir que los publicadores obtengan el consentimiento del usuario. Para obtener más información, consulta la página de google_mobile_ads en pub.dev.

Cambios rotundos

Mientras continuamos con el crecimiento y la mejora de Flutter, nuestro objetivo es mantener al mínimo los cambios rotundos.  Con la versión de Flutter 3, tendremos los siguientes cambios rotundos:

Si usas cualquiera de estas API, lee la guía de migración en Flutter.dev.

Resumen

Desde el equipo de Flutter en Google, agradecemos el trabajo increíble que realizó la comunidad para ayudar a que Flutter mantenga su estado como el conjunto de herramientas de IU multiplataforma más popular, según lo medido por analistas como Statista y SlashData. Esperamos colaborar con la comunidad para continuar brindando una herramienta impulsada por la comunidad que ayude a crear una experiencia agradable tanto para los desarrolladores como para los usuarios.



Source: Google Dev

Deja un comentario