Es hora nuevamente de un lanzamiento estable de Flutter, ¡y estamos increíblemente orgullosos de anunciar Flutter 3 ! Hace solo tres meses, anunciamos la compatibilidad con Flutter para Windows. ¡Hoy, nos complace anunciar que Flutter ahora es estable para macOS y Linux, además de Windows!
Tenemos varias cosas emocionantes que anunciar como parte de este lanzamiento, incluida la actualización del soporte de Flutter para macOS y Linux, mejoras significativas en el rendimiento, actualizaciones móviles y 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 importantes. Entonces, ¡vamos al grano!
Listo para la producción en todas las plataformas de escritorio
Linux y macOS se han vuelto estables e incluyen las siguientes características:
Menús en cascada y compatibilidad con la barra de menús del sistema macOS
Ahora puede crear barras de menú renderizadas en la plataforma en macOS usando el
PlatformMenuBar
widget, que admite la inserción de menús exclusivos de la plataforma y controla lo que aparece en los menús de la aplicación macOS.
Soporte completo para 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 totalmente 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 admiten servicios de accesibilidad como lectores de pantalla, navegación accesible y colores invertidos.
Binarios universales por defecto en macOS
A partir de Flutter 3, las aplicaciones de escritorio Flutter macOS se crean como archivos binarios universales, con soporte nativo tanto para las Mac basadas en Intel existentes como para los últimos dispositivos Apple Silicon de Apple.
Obsolescencia de Windows 7/8 para desarrollo
Con este lanzamiento, elevamos la versión de Windows recomendada para el desarrollo a Windows 10. Si bien no bloqueamos el desarrollo en versiones anteriores (Windows 7, Windows 8, Windows 8.1), Microsoft ya no admite estas versiones y proporcionamos pruebas limitadas en estas versiones. Si bien continuaremos ofreciendo soporte de “mejor esfuerzo” para versiones anteriores, lo alentamos a que actualice.
Actualizaciones móviles
Nuestras actualizaciones a las plataformas móviles incluyen lo siguiente:
Soporte de teléfono plegable
La versión Flutter 3 es compatible con dispositivos móviles plegables. En una colaboración encabezada por Microsoft, las nuevas funciones y widgets le permiten crear 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
DisplayFeatureSubScreen
widget ahora posiciona su widget secundario sin superponerse a los límites de
DisplayFeatures
, y ya se ha integrado con los cuadros de diálogo y ventanas emergentes predeterminados del marco, lo que hace que Flutter sea consciente y responda a estos elementos desde el primer momento .
Pruebe las muestras del emulador de Surface Duo , incluida una con una bifurcación especial de Flutter Gallery, para ver las pantallas duales de Flutter en acción.
Soporte de frecuencia de actualización variable de iOS
Flutter ahora admite frecuencia de actualización variable en dispositivos iOS con pantallas ProMotion, incluidos iPhone 13 Pro y iPad Pro. En estos dispositivos, las aplicaciones de Flutter pueden renderizar a frecuencias de actualización que alcanzan los 120 hz, que anteriormente estaban limitadas a 60 hz. Esto da como resultado una experiencia más fluida durante animaciones rápidas como el desplazamiento. Consulte flutter.dev/go/variable-refresh-rate para obtener más detalles.
Lanzamientos simplificados de iOS
Agregamos nuevas opciones al comando flutter build ipa para simplificar el lanzamiento de su aplicación iOS. Cuando esté listo para distribuir a TestFlight o App Store, ejecute
flutter build ipa
para crear un archivo Xcode (
.xcarchive
archivo) y un paquete de aplicaciones (
.ipa
archivo). Opcionalmente, puede agregar
—-export-method ad-hoc
,
—-export-method development
o
—-export-method enterprise
. Una vez que se crea el paquete de aplicaciones, cárguelo en Apple a través de la aplicación Apple Transport macOS o en la línea de comando usando
xcrun altool
(ejecutar
man altool
para obtener instrucciones de autenticación de la clave API de App Store Connect). Después de cargar, su aplicación está disponible para su lanzamiento en TestFlight o App Store . Después de configurar la configuración inicial de su proyecto Xcode, como el nombre para mostrar y el ícono de la aplicación, ya no necesita abrir Xcode para lanzar su aplicación.
Actualización de la versión de Gradle
Si crea un nuevo proyecto con la herramienta Flutter, es posible que observe que los archivos generados ahora usan las últimas versiones de los complementos Gradle y Android Gradle. Para los proyectos existentes, debe cambiar manualmente las versiones a 7.4 para Gradle y 7.1.2 para el complemento de Android Gradle.
Puesta en extinción de iOS/iOS 9/iOS 10 de 32 bits
Como anunciamos en febrero de 2022 con la versión estable 2.10, el soporte 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, consulte RFC: fin del soporte para dispositivos iOS de 32 bits .
actualizaciones web
Nuestras actualizaciones para aplicaciones web incluyen lo siguiente:
Decodificación de imágenes
Flutter web ahora detecta y usa automáticamente la API de ImageDecoder en los navegadores que la admiten. A partir de hoy, la mayoría de los navegadores basados en Chromium (Chrome, Edge, Opera, Samsung Browser y más) han agregado esta API.
La nueva API decodifica imágenes de forma asíncrona fuera del hilo principal utilizando los códecs de imágenes integrados del navegador. Esto acelera la decodificación de imágenes en 2x, y nunca bloquea el hilo principal, eliminando todos los bloqueos que antes causaban las imágenes.
Ciclos de vida de las aplicaciones web
La nueva API de ciclo de vida para las aplicaciones web Flutter le brinda la flexibilidad de controlar el proceso de arranque de su aplicación Flutter desde la página HTML de alojamiento y ayuda a Lighthouse a analizar el rendimiento de su aplicación. 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 aplicación Flutter.
Para obtener más información, consulte Personalización de la inicialización de aplicaciones web en docs.flutter.dev.
Actualizaciones de herramientas
Nuestras actualizaciones de herramientas Flutter y Dart incluyen:
Paquete de pelusa actualizado
Se ha lanzado la versión 2.0 de los paquetes lint:
- Flutter: https://pub.dev/packages/flutter_lints/versions/2.0.0
- Dardo: https://pub.dev/packages/lints/versions/2.0.0
Las aplicaciones generadas en Flutter 3
flutter create
habilitan automáticamente los conjuntos de pelusas v2.0. Se alienta a las aplicaciones, paquetes y complementos existentes a migrar a v2.0 para seguir las mejores y más recientes prácticas en el mundo de Flutter, ejecutando
flutter pub upgrade --major-versions flutter_lints
.
La mayoría de las advertencias de pelusa recién agregadas en v2 vienen con correcciones automáticas. Entonces, después de actualizar a la última versión del paquete en el
pubspec.yaml
archivo de su aplicación, puede ejecutar
dart fix —-apply
su base de código para corregir la mayoría de las advertencias de pelusa automáticamente (algunas advertencias aún requieren un trabajo manual). Las aplicaciones, los paquetes o los complementos que
package:flutter_lints
aún no se usan pueden migrar siguiendo la guía de migración .
Mejoras de rendimiento
Gracias al colaborador de código abierto knopp , se ha habilitado el repintado parcial en los dispositivos Android que lo admiten. En nuestras pruebas locales, este cambio redujo los tiempos de rasterización de fotogramas promedio, percentil 90 y percentil 99 en el
backdrop_filter_perf
punto de referencia en un dispositivo Pixel 4 XL en 5 veces. El repintado parcial cuando hay una sola región sucia rectangular ahora está habilitado tanto en iOS como en dispositivos Android más nuevos.
Hemos mejorado aún más el rendimiento de las animaciones de opacidad en casos simples. En particular, cuando un
Opacity
widget contiene solo una primitiva de representación, se omite el
saveLayer
método que normalmente se invoca .
Opacity
En un punto de referencia construido 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 más escenarios.
Gracias al trabajo del colaborador de código abierto JsouLiang , los subprocesos de interfaz de usuario y de 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 nuestros puntos de referencia, esto resultó en tiempos promedio de construcción de fotogramas ~ 20% más rápidos.
Antes de la versión 3, la política de admisión para el caché ráster solo analizaba la cantidad de operaciones de dibujo en una imagen, asumiendo que cualquiera con más de unas pocas operaciones sería un buen candidato para el almacenamiento en caché. Desafortunadamente, esto resultó en que el motor gastara memoria para almacenar en caché imágenes que en realidad eran muy rápidas de renderizar. Esta versión presenta un mecanismo que estima la complejidad de representación de las imágenes en función del costo de las operaciones de dibujo que contiene. El uso de esto como la política de admisión de caché de ráster redujo el uso de memoria sin disminuir el rendimiento en nuestros puntos de referencia.
Gracias al colaborador de código abierto ColdPaleLight , que corrigió un error en la programación de fotogramas que provocaba la eliminación de una pequeña cantidad de fotogramas de animación en iOS. Gracias a todos los que informaron este problema y proporcionaron reproducciones y videos de los fotogramas perdidos.
Impulso
El equipo ha estado trabajando arduamente en una solución para abordar el bloqueo de inicio temprano en iOS y otras plataformas. En el lanzamiento de Flutter 3, puede obtener una vista previa de un backend de renderizado experimental llamado Impeller en iOS. Impeller precompila un conjunto de sombreadores más pequeño y simple en el momento de la construcción del motor para que no se compilen mientras se ejecuta una aplicación; esta ha sido una fuente importante de bloqueo en Flutter. El impulsor no está listo para la producción y está lejos de estar terminado. Todavía no se han implementado todas las funciones de Flutter, pero estamos lo suficientemente satisfechos con su fidelidad y rendimiento en la aplicación flutter/gallery como para compartir nuestro progreso. En particular, el peor cuadro en la animación de transición de la aplicación Galería es alrededor de 20 veces más rápido .
Impulsor está disponible bajo una bandera en iOS. Puede pasar
—-enable-impeller
a
flutter run
, o establecer el
FLTEnableImpeller
indicador en su
Info.plist
archivo en
true
, para probar Impeller. El desarrollo de Impeller continúa en el canal maestro de Flutter y esperamos brindar más actualizaciones en futuras versiones.
Anuncios en línea en Android
Cuando use el
google_mobile_ads
paquete, debería ver un mejor rendimiento en las interacciones críticas del usuario, como el desplazamiento y las transiciones entre páginas. Esto es particularmente notable en los dispositivos populares en los mercados emergentes. ¡La mejor parte es que no se requieren cambios de código!
Bajo el capó, Flutter ahora compone vistas de Android, comúnmente conocidas como vistas de plataforma , de forma asincrónica. Esto significa que el subproceso ráster de Flutter no necesita esperar a que se muestre la vista de Android. En cambio, el motor de Flutter coloca la vista en la pantalla usando una textura OpenGL que administra.
Más actualizaciones emocionantes
Otras actualizaciones del ecosistema de Flutter incluyen las siguientes:
Materia 3
Flutter 3 es compatible con Material Design 3 , la próxima generación de Material Design. Flutter 3 proporciona soporte opcional para Material 3; esto incluye características 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 la nueva aplicación Take your Flutter from Boring to Beautiful codelab. Consulte los documentos de API para obtener detalles sobre cómo optar por estas nuevas funciones y qué componentes son compatibles con Material 3. Siga el trabajo en curso con el problema de Material 3 Umbrella .
extensiones de tema
Flutter ahora permite agregar cualquier cosa a la biblioteca de materiales
ThemeData
, con un concepto llamado extensiones de tema . En lugar de extender (en el sentido de Dart)
ThemeData
y volver a implementar sus métodos
copyWith
,
lerp
y otros, puede especificar
ThemeData
.extensions. Además, como desarrollador de paquetes, puede proporcionar
ThemeExtension
. Consulte flutter.dev/go/theme-extensions para obtener más detalles y consulte este ejemplo en GitHub .
anuncios
Sabemos que es importante que los editores soliciten el consentimiento para anuncios personalizados y manejen los requisitos de transparencia de seguimiento de aplicaciones (ATT) de Apple.
Para cumplir con estos requisitos, Google ofrece el SDK de User Messaging Platform (UMP), que reemplaza al SDK de consentimiento de código abierto anterior . En el próximo lanzamiento de GMA SDK para Flutter, agregaremos compatibilidad con UMP SDK para permitir que los editores obtengan el consentimiento del usuario. Para obtener más detalles, consulte la página google_mobile_ads en pub.dev.
Rompiendo cambios
A medida que continuamos creciendo y mejorando Flutter, nuestro objetivo es mantener la cantidad de cambios importantes al mínimo. Con el lanzamiento de Flutter 3, tenemos los siguientes cambios importantes:
- API obsoleta eliminada después de v2.10
- Transiciones de página reemplazadas por ZoomPageTransitionsBuilder
- Migrar useDeleteButtonTooltip a deleteButtonTooltipMessage of Chips
Si está utilizando alguna de estas API, consulte la guía de migración en Flutter.dev .
Resumen
Desde el equipo de Flutter en Google, agradecemos el increíble trabajo que la comunidad ha realizado para ayudar a Flutter a mantener su estatus como el conjunto de herramientas de interfaz de usuario multiplataforma más popular, según lo medido por analistas como Statista y SlashData. ¡Esperamos trabajar juntos como 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!