La versión de Flutter 2.2 se centra en los detalles finales y la optimización, que incluye mejoras de rendimiento de iOS, componentes diferidos de Android, service worker actualizado para la Web de Flutter y mucho más.
Hoy es el día en el que Flutter 2.2 comienza a estar disponible. Si deseas obtener esta versión, cambia al canal estable y actualiza tu instalación actual de Flutter o visita flutter.dev/docs/get-started para iniciar una instalación nueva.
Si bien solo pasaron un par de meses desde el lanzamiento de Flutter 2, tenemos para compartir muchas mejoras en la versión 2.2. En esta versión, se fusionan 2,456 PR, y se cierran 3,105 problemas en todo el framework, el motor y los repositorios de complementos. Nos gustaría agradecer especialmente a toda la comunidad de Flutter que brindó una cantidad significativa de PR y revisiones de los PR, que incluye a Abhishek01039, quien contribuyó con la mayoría de los PR (17), y a xu-baolin, quien revisó la mayoría de los PR (9) con relación a Flutter 2.2. Les agradecemos a todos los colaboradores por su ayuda para publicar Flutter 2.2 en el canal estable. No podríamos hacerlo sin ustedes.
Con cada lanzamiento nuevo de Flutter en versión estable, se incluye un conjunto nuevo de actualizaciones, ya sean mejoras de rendimiento, características nuevas o correcciones de errores. Además, una versión comprende una cantidad de características que todavía no están listas para su uso en producción, pero que queremos que puedas verificar si funcionan como deseas. Por último, cada versión nueva incluye un conjunto de actualizaciones de las herramientas relacionadas y actualizaciones de la comunidad de Flutter a un nivel más general. Honestamente, en la actualidad, suceden tantos cambios con cada versión nueva de Flutter que no podemos abarcar todo en una sola entrada de blog, pero intentaremos señalar los aspectos más destacados.
Esta versión abarca una variedad amplia de mejoras de Flutter 2, que incluye actualizaciones en Android, iOS y la Web, íconos de Material nuevos, actualizaciones del manejo de texto, el comportamiento de la barra de desplazamiento y la compatibilidad con el cursor del mouse para el widget TextSpan, y lineamientos nuevos para admitir mejor varios tipos de plataformas desde una única base de código fuente. Todas estas características están disponibles ahora en versión estable y se pueden usar en apps de producción. Además, todas se compilan en una nueva versión de Dart.
Flutter 2.2 incluye la versión de Dart 2.13. Entre otros cambios, esta actualización de Dart incluye una función nueva de alias para tipos, que te permite crear alias para tipos y funciones:
Los alias para tipos permiten asignar nombres breves y agradables a tipos extensos y complicados, y también te permiten cambiar el nombre de tus clases de una manera no rotunda. También, se incluyen más novedades en Dart 2.13; consulta los detalles en el anuncio de lanzamiento de Dart 2.13.
En esta versión, se mejoró la última plataforma estable de Flutter: la Web.
Para empezar, optimizamos el comportamiento del almacenamiento en caché con un mecanismo nuevo de carga de service worker y corregimos la doble descarga de main.dart.js. En versiones anteriores de la Web de Flutter, service worker descargaba actualizaciones a tu app en segundo plano, a la vez que le brindaba acceso a tu usuario a la versión desactualizada de tu app. Una vez que se descargaba la actualización, el usuario no veía esos cambios hasta que actualizaba un par de veces la página del navegador. A partir de Flutter 2.2, cuando el service worker nuevo detecta un cambio, el usuario esperará hasta que se descarguen las actualizaciones para usar la app, pero luego verá las actualizaciones sin la necesidad de una segunda actualización manual de la página.
Para habilitar este cambio, es necesario que vuelvas a generar el archivo index.html de tu app de Flutter. Para ello, guarda tus modificaciones, elimina el archivo index.html y, luego, ejecuta flutter create. en el directorio de tu proyecto, de modo que puedas volver a crearlo.
También, mejoramos ambos procesadores web. Para HTML, agregamos compatibilidad con funciones de fuente a fin de habilitar la configuración de FontFeature, así como el uso de API de Canvas para renderizar texto, de manera que aparezca en el lugar correcto cuando se coloca el cursor. Para HTML y CanvasKit, agregamos compatibilidad con máscaras para sombreadores y computeLineMetrics, y se corrigieron las brechas de paridad entre la Web de Flutter y las apps para dispositivos móviles. Por ejemplo, los desarrolladores ahora pueden usar máscaras de opacidad a fin de realizar transiciones de fundido de salida con máscaras para sombreadores y usar computeLineMetrics de la misma manera que con las apps para dispositivos móviles.
Para la Web de Flutter, así como para Flutter en general, la accesibilidad es una de nuestras prioridades principales. Según su diseño, Flutter implementa la accesibilidad mediante la compilación de un árbol SemanticsNode. Una vez que el usuario de una aplicación web de Flutter habilita la accesibilidad, el framework genera un árbol del DOM paralelo al árbol del DOM RenderObject y traduce las propiedades semánticas a Aira. En esta versión, mejoramos la posición del nodo semántico a fin de cerrar la brecha entre las aplicaciones web para dispositivos móviles y computadoras de escritorio cuando se usan transformaciones, lo que implica que el cuadro de enfoque debe aparecer, de manera correcta, sobre los elementos cuando los widgets se diseñan con transformaciones. Si deseas ver el funcionamiento, mira este video de Victor Tsaran, quien lidera el programa de accesibilidad para Material Design, en el que usa VoiceOver con la app de Galería de Flutter:
También, expusimos el árbol de depuración de nodos semánticos con una marca de línea de comandos en los modos de perfil y de lanzamiento a fin de permitir que los desarrolladores depuren la accesibilidad mediante la visualización de los nodos semánticos que se crearon para su aplicación web.
Si deseas habilitar esta característica para tu propia aplicación web de Flutter, ejecuta lo siguiente:
$ flutter run -d chrome --profile \ --dart-define=FLUTTER_WEB_DEBUG_SHOW_SEMANTICS=true
Con esa marca activada, podrá ver tus nodos semánticos en la parte superior de los widgets, lo que te permite depurar y verificar si los elementos semánticos se colocan en un lugar que no deberían estar. Si encuentras ejemplos de este tipo, no dudes en enviar un informe de errores.
Si bien logramos un progreso significativo mediante la compatibilidad con un conjunto de funciones básicas de accesibilidad, continuaremos mejorando este tipo de compatibilidad. En las compilaciones disponibles en los canales principales y para desarrollares que sean superiores a la versión estable 2.2, agregamos una API con el objeto de permitir que los desarrolladores, de forma programática, habiliten automáticamente la accesibilidad para sus apps y estamos solucionando problemas mediante la tecla Tabulador con lectores de pantalla.
Por último, aunque no menos importante, la última versión de Flutter DevTools ahora es compatible con Layout Explorer para tus aplicaciones web de Flutter.
Esta actualización te brinda la misma herramienta de depuración de diseño en la Web a la que estás acostumbrado con tus apps para dispositivos móviles y computadoras de escritorio.
Para iOS, en esta versión, logramos que la transición de página sea más fluida en Cupertino mediante una reducción del 75% en el tiempo que se tarda para renderizar los fotogramas de la animación y, posiblemente, un porcentaje mayor en teléfonos de gama baja. No solo buscamos mejoras en el rendimiento del usuario final, sino que también maneras de mejorar el rendimiento del desarrollo.
En esta versión, implementamos instalaciones incrementales de iOS durante el proceso de desarrollo. Según nuestros puntos de referencia, observamos una disminución del 40% en la cantidad de tiempo para instalar una versión actualizada de tu app para iOS, lo que reduce el tiempo de respuesta cuando se prueban cambios en la app.
A medida que Flutter se expande para admitir más plataformas en versión estable, es útil tener en cuenta apps que sean compatibles no solo con diferentes factores de forma, como dispositivos móviles, tablets y computadoras de escritorio, sino que también con diferentes tipos de entradas (táctil frente al mouse y al teclado) y plataformas con diferentes idiomas, como paneles de navegación frente a menús del sistema para navegación. Denominamos apps "adaptables a las plataformas" a las que pueden ajustarse a los detalles de diferentes plataformas de destino.
Para obtener una introducción a las consideraciones que debes tener en cuenta cuando compilas apps adaptables a las plataformas, te recomendaremos la sesión Cómo compilar apps adaptables a las plataformas de Kevin Moore. Para obtener un panorama más detallado, consulta los lineamientos sobre apps adaptables a las plataformas en flutter.dev.
Por último, para las apps de ejemplo que se escribieron para varias plataformas según estos principios, recomendamos las apps Flokk y Flutter Folio de gSkinner. Puedes descargar el código para Flokk y Folio, así como descargar Flokk y Folio de las distintas tiendas de aplicaciones o puedes ejecutarlos directamente desde tu navegador. Otro gran ejemplo es la app que se utiliza para crear los mismos lineamientos:
Las secciones de la experiencia de usuario en los lineamientos sobre apps adaptables a las plataformas de Flutter se basan en los nuevos lineamientos de Material para pantallas grandes. En estos lineamientos nuevos del equipo de Material, se incluyen versiones renovadas de varios de los artículos principales sobre diseño, así como actualizaciones de varios componentes y un kit de diseño actualizado, en los que se tuvieron en cuenta las pantallas grandes.
El objetivo de Flutter siempre fue habilitar apps que hagan más que solo ejecutarse en varias plataformas; no terminamos nuestra tarea hasta que se ejecuten tus apps, de manera correcta, en todas las plataformas que establezcas como objetivo. Flutter cuenta con la compatibilidad que necesitas no solo para orientar tu app a varias plataformas, sino que también está diseñado para adaptar tus apps según el tamaño de la pantalla, los modos de introducción de texto, y los idiomas de cada una de estas plataformas.
Además, con respecto a los lineamientos de Material, en esta versión, no incluimos uno, sino dos PR separados que agregan íconos nuevos de Material a Flutter, incluido un ícono para la misma Dash.
Estas actualizaciones aumentan a más de 7,000 la cantidad total de íconos de Material para tus apps. Si tienes problemas para encontrar el ícono que buscas entre tantos (¿quién no?), puedes buscar por categoría y nombre en fonts.google.com/icons.
Una vez que encuentres el ícono perfecto, la pestaña nueva "Flutter" te muestra cómo usarlo, o puedes descargar solo ese ícono para usarlo como un elemento independiente en tu app. Agregar Dash a tu app de Flutter nunca fue tan fácil.
A medida que continuamos mejorando Flutter con el objeto de admitir las especificaciones en cada plataforma, seguimos avanzando hacia áreas nuevas que no eran tan importantes en los factores de forma para dispositivos móviles como lo son en los factores de forma para computadoras de escritorio. Una de esas áreas es el manejo de texto. En esta versión, comenzamos a refactorizar la manera en que controlamos la entrada de texto que habilita características, como cancelar una pulsación de tecla mientras fluye a través de la jerarquía de widgets, y mediante la introducción de la capacidad para personalizar, por completo, las pulsaciones de teclas que se relacionan con las acciones de texto.
Poder cancelar una pulsación de tecla permite que Flutter realice implementaciones, como usar la barra espaciadora y las teclas de flecha sin activar eventos de desplazamiento, lo que les brinda a los usuarios finales una experiencia más intuitiva. Puedes usar esta misma capacidad para controlar una pulsación de tecla antes de que llegue a los widgets superiores en tus propias apps. Otro ejemplo es que, en esta versión, puedes usar la tecla Tabulador entre un objeto TextField y un botón en tu app de Flutter, y simplemente funciona:
Las acciones de texto personalizadas te permiten realizar acciones, como el manejo especial de la tecla Intro en un objeto TextField; por ejemplo, puedes activar el envío de un mensaje en un cliente de chat y, al mismo tiempo, permitir que se inserte una línea nueva a través de Ctrl + Intro. Estas mismas acciones de texto permiten que Flutter brinde diferentes pulsaciones de teclas para hacer coincidir el comportamiento de la edición de texto con el mismo SO host, por ejemplo, Ctrl + C en Windows y Linux, pero Cmd + C en macOS.
Por ejemplo, la siguiente muestra anula la acción predeterminada de la flecha izquierda y brinda una acción nueva para las teclas de retroceso y suprimir:
Todavía tenemos mucho por hacer, pero estamos trabajando para brindarte acciones completas de edición de texto. Nuestro objetivo es que, para el momento en que la app de Flutter para computadoras de escritorio alcance la versión estable, los usuarios no puedan distinguir entre editar texto en las apps de Flutter y cualquier otra app en el SO host.
Como parte de nuestra búsqueda continua para lograr que las apps de Flutter se comporten como las mejores apps en cada plataforma, revisamos las barras de desplazamiento en esta versión. Cuando se trata de realmente mostrar una barra de desplazamiento, Android y iOS son iguales; no muestran una de forma predeterminada. Por otro lado, en una app de escritorio, por lo general, una barra de desplazamiento se muestra automáticamente cuando el contenido es más grande que el contenedor, lo que requiere que agregues un widget superior de barra de desplazamiento. Para obtener el comportamiento correcto en dispositivos móviles o computadoras de escritorio, en esta versión, se agrega automáticamente una barra de desplazamiento cuando es necesario.
Ten en cuenta el siguiente código sin barra de desplazamiento:
Cuando se ejecuta en una computadora de escritorio, aparece una barra de desplazamiento:
Si no te gusta el aspecto de la barra de desplazamiento o el hecho de que siempre se muestre, puedes configurar una propiedad ScrollBarTheme. Si no te gusta este comportamiento predeterminado, puedes configurar una clase ScrollBehavior para cambiarlo en toda la app o en una instancia en particular. Para obtener más detalles sobre el nuevo comportamiento predeterminado de la barra de desplazamiento y la manera de migrar tu código al conjunto nuevo de prácticas recomendadas, consulta los documentos en flutter.dev.
En versiones anteriores de Flutter, podías agregar un cursor del mouse (como una mano que indica que en un elemento se puede hacer clic) sobre cualquier widget. De hecho, en la mayoría de los casos, Flutter agrega esos cursores del mouse para ti, como, por ejemplo, un cursor de mano del mouse sobre todos los botones. Sin embargo, si querías una ejecución de texto enriquecido con diferentes intervalos de texto que tengan sus propios estilos y, posiblemente, la longitud necesaria para ajustarse, tenías mala suerte ya que TextSpan no es un widget y, por lo tanto, no se podía usar como un alcance visual para el cursor de un mouse… ¡Hasta ahora! A partir de esta versión, cuando tengas un objeto TextSpan con un reconocedor de gestos, aparecerá automáticamente el cursor del mouse correcto:
Ahora, puedes tener todos los intervalos de texto de ajuste que desees, y cualquiera de estos con reconocedores mostrará los cursores correctos del mouse.
En esta versión, el objeto TextSpan también admite onEnter y onExit junto con mouseCursor. Es posible que estos cambios parezcan pequeños, pero contribuyen, en gran medida, a que una app de Flutter se sienta como un usuario espera que se sienta.
Además de las nuevas características disponibles para su uso en producción, Flutter 2.2 incluye una serie de características en versión preliminar, que incluyen mejoras en el rendimiento del compilador de sombreadores de iOS, compatibilidad con componentes diferidos de Android, actualizaciones de las app de Flutter para computadoras de escritorio y compatibilidad con el host ARM64 de Linux de Sony. Pon a prueba estas características y avísanos si tienes algún problema.
En términos de renderización de gráficos, un "sombreador" es un programa que se compilará y se ejecutará en la GPU disponible en el dispositivo del usuario final. Desde el comienzo, Flutter utilizó sombreadores en la biblioteca de gráficos subyacente de Skia para ofrecer un rendimiento nativo en sus propios efectos gráficos de alta calidad con colores, sombras, animación y más. Debido a la flexibilidad de las API de Flutter, los sombreadores se generan y se compilan justo a tiempo, de manera síncrona con las cargas de trabajo de fotogramas que los necesitan. Cuando el tiempo para compilar sombreadores supera el presupuesto de fotogramas, los usuarios perciben el resultado como "bloqueo".
Para evitar el bloqueo, Flutter brinda la capacidad de almacenar los sombreadores en caché durante una ejecución de entrenamiento, que luego se empaquetan y se incluyen con una app, y se compilan antes del primer fotograma mientras se inicia el motor de Flutter. Es decir, no es necesario que los sombreadores que se compilan previamente se compilen durante una carga de trabajo de fotogramas, y tampoco generarán un bloqueo. Sin embargo, en un principio, Skia solo implementó esta característica para OpenGL.
Por lo tanto, cuando habilitamos el backend de Metal de forma predeterminada en iOS, dado que Apple dejó sin efecto OpenGL, aumentaron los peores tiempos entre fotogramas, según las mediciones que se realizaron con nuestros puntos de referencia, y aumentaron los informes de bloqueos por parte de los usuarios. Nuestras propias mediciones indicaron que, con frecuencia, estos informes se debían a un aumento en los tiempos de compilación de sombreadores, un aumento en la cantidad de sombreadores que Skia generó para el backend de Metal y la imposibilidad de que los sombreadores compilados se almacenen en caché durante las ejecuciones, de modo que el bloqueo duró más que la primera ejecución de una app.
Por lo tanto, hasta ahora, la única manera de evitar este bloqueo en iOS fue simplificar escenas y animaciones, lo que no fue ideal.
Sin embargo, ahora mismo, en el canal para desarrolladores, se incluye una versión preliminar de la compatibilidad nueva en Skia con la preparación de sombreadores para Metal. Mediante Skia, Flutter ahora compila los sombreadores incluidos antes de que comience la primera carga de trabajo de fotogramas.
Sin embargo, para esta solución, se deben tener en cuenta las siguientes advertencias:
Si deseas aprovechar esta compatibilidad nueva en tus apps, puedes seguir las instrucciones en flutter.dev.
De todas formas, aún no terminamos con este trabajo. En Android y iOS, esta implementación presenta algunos inconvenientes:
Consideramos que este último problema es el más importante para corregir. En particular, consideramos que el proceso de realizar ejecuciones de entrenamiento y razonar sobre las desventajas que impone el tamaño de la app y la latencia de inicio de la app es demasiado engorroso. Por lo tanto, continuamos investigando enfoques para eliminar el bloqueo de la compilación de sombreadores, y todos los bloqueos en general, que no dependen de esta implementación. En especial, estamos trabajando con el equipo de Skia para reducir la cantidad de sombreadores que genera en respuesta a las solicitudes de Flutter, así como estamos investigando cuánto Flutter podría implementarse con un conjunto pequeño de sombreadores definidos de manera estética que se incluyen con el motor de Flutter.
Puedes seguir este proyecto en el repositorio de Flutter para ver nuestro progreso.
Para Android, esta versión utiliza la característica de compilación AOT de divisiones de Dart con el fin de permitir que las apps de Flutter descarguen módulos que contienen código compilado con anticipación y elementos en tiempo de ejecución. Denominamos "componente diferido" a cada una de estas divisiones instalables. Si diferimos la descarga de código y elementos solo cuando sea necesario, el tamaño de la instalación inicial se puede reducir de manera significativa. Por ejemplo, implementamos una versión de la Galería de Flutter con todos los estudios y todas las demostraciones diferidas, y observamos una disminución del 46% en el tamaño de la instalación inicial.
Cuando se compila con componentes diferidos y habilitados, Dart compila el código importado, de manera exclusiva, con la palabra clave diferida en diferentes bibliotecas compartidas que se empaquetan en componentes diferidos junto con los elementos.
En la actualidad, los componentes diferidos solo están disponibles en Android, y esta característica se ofrece como una versión preliminar anticipada. Aprende cómo implementar componentes diferidos en la página nueva de Componentes diferidos en flutter.dev. Esta página también se enlaza con una página en el wiki de Flutter que contiene un análisis detallado de la manera en que funciona esta característica. Registra los problemas en la herramienta de seguimiento de errores de Flutter.
En esta versión, se incluye otra actualización de Flutter destinada a los amantes de las computadoras de escritorio; la compatibilidad con UWP de Windows ahora está en versión alfa, en el canal para desarrolladores (superior a la versión estable 2.2). UWP te permite llevar tus apps de Flutter a dispositivos en los que las apps estándar de Windows no se ejecutan, incluida la consola Xbox. Para probar esta actualización, primero debes configurar los requisitos previos de UWP. Luego, cambia al canal para desarrolladores y habilita la compatibilidad con UWP:
$ flutter channel dev$ flutter upgrade$ flutter config — enable-windows-uwp-desktop
Una vez que se habilite, crea una app de Flutter que incluya una nueva carpeta winuwp, lo que te permite compilar y ejecutar tu app en un contenedor de UWP:
$ flutter create uwp_fun$ cd uwp_fun$ flutter pub get$ flutter run -d winuwp
Como compilas una app para UWP de Windows, que se ejecuta en un entorno de zona de pruebas en Windows, deberás traspasar el firewall de la app en localhost durante el desarrollo a fin de habilitar acciones, como la recarga en caliente y los puntos de interrupción del depurador. Puedes hacerlo con un comando checknetisolation mediante las instrucciones en la página de documentos sobre computadoras de escritorio de Flutter. Una vez que termines, podrás ver tu app favorita de Flutter ejecutándose como una app de UWP en Windows.
Por supuesto, puedes ejecutar apps de UWP mucho más interesantes, como estas apps de Flutter que se ejecutan en una consola Xbox.
Nos gustaría agradecerle especialmente a clarkezone, que trabajó en esta compatibilidad desde hace tanto tiempo como yo soy estuve en el equipo de Flutter. Para obtener más detalles sobre la versión alfa de UWP de Windows, consulta flutter.dev/desktop/#windows-uwp.
Otro esfuerzo excelente por parte de un miembro de la comunidad de Flutter a nivel general es el de HidenoriMatsubayashi, un ingeniero de software de Sony, que contribuyó con la compatibilidad para orientarse al host ARM64 de Linux. Este PR te permite compilar y ejecutar apps de Flutter en máquinas con ARM64 de Linux.
Es emocionante ver que la comunidad de Flutter lleva a Flutter a lugares que el equipo de Google nunca podría haber imaginado. ¡Continúa trabajando así, HidenoriMatsubayashi!
El motor y el framework de Flutter forman solo una parte de la experiencia general. Las actualizaciones del ecosistema de paquetes y las herramientas tienen la misma importancia que la experiencia del desarrollador de Flutter. Además, tenemos para compartir algunas actualizaciones excelentes en estas áreas.
Con respecto al ecosistema, tenemos para anunciar una serie de nuevos paquetes de Flutter Favorite, así como varias actualizaciones de FlutterFire, la compatibilidad de Flutter con Firebase. Aún mejor, FlutterFire es compatible con la versión preliminar nueva de Verificación de aplicaciones de Firebase para que los desarrolladores de Flutter puedan aprovecharla desde el primer día.
En lo que respecta a las herramientas, se incluyeron actualizaciones nuevas de Flutter DevTools a fin de optimizar la huella de memoria de tu app y una pestaña nueva para el paquete provider. Hay actualizaciones notables de los complementos IDE para VS Code y Android Studio/IntelliJ y, si eres un autor de contenido que se orienta a Flutter, existe una forma completamente nueva de integrar DartPad en tu desarrollo.
Por último, aunque no menos importante, se incluye una herramienta nueva de diseño y compilación de apps de código de nivel inferior que se denomina FlutterFlow. Esta se orienta a Flutter y se ejecuta en la Web, ya que se compiló con Flutter.
Como parte de esta versión, el Comité del ecosistema de Flutter trabajó arduamente para certificar 24 paquetes nuevos de Flutter Favorite, nuestra expansión más grande hasta el momento. Los paquetes de Flutter Favorite que se etiquetaron recientemente incluyen lo siguiente:
Todos estos paquetes se migraron a la seguridad nula y son compatibles con Android, iOS y la Web, según corresponda. Por ejemplo, firebase_crashlytics no tiene un SDK subyacente en la Web, y android_alarm_manager_plus está diseñado específicamente para Android.
Los paquetes "plus" de la comunidad de Flutter brindan un superconjunto de los paquetes correspondientes del equipo de Flutter. Por ejemplo, el equipo de Flutter en Google brindó el paquete battery desde antes del lanzamiento inicial de Flutter, y este paquete se migró a la seguridad nula, pero solo es compatible con iOS y Android. Por otro lado, el paquete battery_plus de la comunidad de Flutter es compatible con las seis plataformas de Flutter, lo que incluye la Web, Windows, macOS y Linux. El hecho de que se hayan otorgado los premios de Flutter Favorite a 9 paquetes "plus" representa un gran avance en la madurez de la comunidad de Flutter en su conjunto. Flutter es mucho más grande de que lo que hace el equipo de ingenieros de Google. Te recomendamos que pronto migres tu código a los paquetes "plus" ya que, en las próximas semanas, se actualizarán los paquetes correspondientes de Google.
El complemento googleapis brinda contenedores Dart que se generan automáticamente alrededor de 185 API de Google para que se use en tus aplicaciones Dart del cliente o del servidor (lo que incluye tus apps de Flutter). Si deseas obtener más información sobre este paquete, el autor realizó una charla de I/O sobre cómo potenciar tus apps de Flutter con las API de Google.
El paquete win32 es una maravilla de la ingeniería, ya que incluye la mayoría de las llamadas a la API de Win32 de uso común mediante Dart FFI para hacerlas accesibles al código Dart sin necesidad de un compilador C o el SDK de Windows. A medida que Flutter gana popularidad en la plataforma de Windows, el paquete win32 se convirtió en una dependencia clave para muchos complementos populares, incluido path_provider, uno de los más conocidos. Además, como prueba de integridad, el autor timsneath hizo algunas locuras, como implementar notepad, snake y tetris, todo en Win32 sin procesar con Dart sin procesar.
Definitivamente, vale la pena echarle un vistazo al paquete win32 si usas Dart o Flutter en Windows.
FlutterFire, la compatibilidad de Flutter con Firebase, es una de las colecciones de complementos más populares que se usa con Flutter. Invertase realizó un trabajo enorme, ya que puso esta colección en producción para la versión Flutter 2 y continuó mejorándola desde entonces. De hecho, desde esa versión de producción inicial de FlutterFire, Invertase redujo en un 79% la cantidad de problemas abiertos y disminuyó en un 88% la cantidad de PR pendientes. Además, no solo hicieron un trabajo excelente con los complementos de calidad de producción, sino que también migraron los complementos de calidad beta a la seguridad nula, y los mantuvieron compilándose y ejecutándose en el mismo núcleo, para que puedas mezclarlos y combinarlos.
Además, Invertase continúa agregando características nuevas a los complementos de FlutterFire, incluida una serie de actualizaciones para la integración de Flutter con Cloud Firebase en esta versión de Flutter:
Por último, aunque no menos importante, FlutterFire brinda compatibilidad con la versión beta de un producto nuevo de Firebase: Verificación de aplicaciones de Firebase Verificación de aplicaciones de Firebase protege tus recursos de backend, como Cloud Storage, contra abusos, por ejemplo, fraude en la facturación o suplantación de identidad. Con Verificación de aplicaciones, los dispositivos que ejecutan tu app de Flutter utilizan un proveedor de certificación de identidad de la app para garantizar que, de hecho, es tu app auténtica, y también pueden verificar si se están ejecutando en un dispositivo auténtico sin alteraciones. Esta certificación se adjunta a todas las solicitudes que tu app realiza a tus recursos de backend de Firebase una vez que activas Verificación de aplicaciones. Para obtener más información, consulta la documentación sobre Verificación de aplicaciones de FlutterFire.
Flutter DevTools incluye una serie de actualizaciones notables con esta versión, incluidas dos mejoras de seguimiento de memoria y una pestaña completamente nueva solo para el complemento provider.
En esta versión de DevTools, la primera mejora de seguimiento de memoria ofrece la capacidad de realizar un seguimiento del lugar en el que se asignó un objeto. Es útil para encontrar la ubicación de una pérdida de memoria en tu código.
En segundo lugar, se incluye la capacidad de insertar mensajes personalizados en la línea de tiempo de la memoria. De esta manera, se te permite brindar marcadores específicos para tu app, como antes y después de haber realizado un trabajo intensivo en la memoria, de modo que puedas verificar que estás borrando de manera correcta.
A medida que las apps de Flutter crezcan cada vez más en situaciones reales, continuaremos asegurándonos de que los desarrolladores de Flutter cuenten con las herramientas necesarias para realizar un seguimiento de las pérdidas de memoria y los problemas de tiempo de ejecución de todo tipo, así como las herramientas para corregirlos.
No solo deseas rastrear los problemas de tiempo de ejecución en el uso del framework de Flutter; sino que también, con frecuencia, deseas realizar un seguimiento de los problemas relacionados con los paquetes. Con más de 15,000 paquetes y complementos compatibles con Flutter en pub.dev, esta situación se vuelve cada vez más probable, ya que tus apps usan más paquetes con el tiempo. Por lo tanto, con esto en mente, experimentamos y agregamos una pestaña nueva Provider a Flutter DevTools. De hecho, esta pestaña es creación de Remi Roussel, el mismo autor del paquete provider (entre muchas otras cosas maravillosas). Si ejecutas la última versión de Flutter DevTools y depuras una app de Flutter que usa el complemento provider, aparecerá automáticamente la pestaña nueva Provider.
La pestaña Provider te muestra los datos que se relacionan con cada uno de tus proveedores, lo que incluye los cambios en tiempo real a medida que ejecutas tu app. Además, como si eso no fuera lo suficientemente asombroso, te permite cambiar los datos, de manera directa, como una forma de probar los casos límite de tu app.
Gracias al trabajo con Remi en esta pestaña, aprendimos cómo apoyar mejor a otros autores de paquetes que les gustaría colaborar también. Puedes leer acerca de cómo Remi compiló la pestaña Provider y nuestro pensamiento actual sobre cómo habilitar más pestañas en la propuesta de complementos de Flutter DevTools. Envíanos tus comentarios y no dudes en comunicarte con nosotros, así nos cuentas tus planes para una pestaña nueva en Flutter DevTools.
Estas son solo algunas de las novedades interesantes de Flutter DevTools en esta versión. Para obtener la lista completa, consulta los anuncios individuales aquí:
En esta versión, también se actualizaron las extensiones IDE de Visual Studio Code y IntelliJ/Android Studio para Flutter. Por ejemplo, ahora, la extensión de Visual Studio Code admite dos reestructuraciones adicionales del código Dart: el método intercalado y la variable local intercalada.
En la extensión de Android Studio/IntelliJ, agregamos la capacidad para imprimir todos los seguimientos de pila en la consola con una opción.
Es útil en proyectos en los que la causa raíz podría estar en un paquete diferente, que anteriormente no se imprimía. Ya tenemos ideas sobre cómo lograr que sean más breves, así que espera más cambios en el futuro.
Si deseas obtener la lista completa de los cambios en las extensiones IDE para esta versión, consulta estos anuncios:
Para asegurarnos de tener la documentación lista en toda una comunidad de desarrolladores de Flutter que crece con rapidez, los equipos de Dart y Flutter siempre buscan maneras de mejorar y expandir las formas de crear contenido educativo. Con esta versión, agregamos una interfaz de usuario nueva paso a paso para DartPad que los desarrolladores pueden usar a fin de seguir los talleres dictados por instructores.
Si se agregan instrucciones directamente a DartPad, habilitamos una experiencia de taller guiada para I/O. Sin embargo, no solo lo compilamos para nuestros propios talleres; si deseas utilizarlo en tus talleres de Dart o Flutter, puedes hacerlo con los lineamientos para crear talleres de DartPad. Esta interfaz nueva se ofrece junto con las características para incorporar DartPad en tu propio sitio y compartir código con DartPad en Gist, que están disponibles desde hace tiempo.
Queremos que todos los que producen contenido de Dart y Flutter puedan brindarles experiencias interactivas y enriquecidas a sus usuarios. Prueba esta característica nueva y comparte tu opinión.
FlutterFlow es una herramienta de diseño y desarrollo de apps de "código de nivel inferior" para compilar apps dentro de tu navegador. Ofrece un entorno WYSIWYG para diseñar tu app en varias páginas mediante datos reales de Firebase. El objetivo de una herramienta de código de nivel inferior es realizar, con facilidad, la mayoría de las acciones habituales, lo que te permite escribir la menor cantidad posible de líneas de código personalizado. De hecho, como demostración, compilaron una app para dispositivos móviles de varias páginas para navegar por el Museo Metropolitano de Arte sin código en menos de una hora. Puedes ver todo el proceso en YouTube.
FlutterFlow genera código de Flutter, por lo que, si necesitas agregar código para personalizar aún más tu app, puedes hacerlo. Puede leer sobre el lanzamiento del producto FlutterFlow en flutterflow.io.
Como siempre, nos esforzamos por reducir la cantidad de cambios rotundos y, en esta versión, pudimos limitarlo a la eliminación de estas desactivaciones:
Puedes encontrar mitigaciones para estos cambios rotundos en flutter.dev.
Como siempre, de parte de todos los miembros del equipo de Flutter en Google, queremos agradecerles. Gracias por formar parte de la comunidad que permite que todo esto sea posible. Con más de una de cada ocho apps nuevas en Play Store que se compilan con Flutter y más de 200,000 apps de Flutter solo en Play Store, nuestro crecimiento continuo es extraordinario. Apps de todos los tamaños en el mundo confían su interfaz de usuario a Flutter para diseñar hermosas experiencias multiplataforma, de modo que puedan encontrar usuarios donde sea que estén.
Por último, en caso de que te lo hayas perdido, antes de que abandones I/O este año, no olvides echarle un vistazo a la aplicación web cabina de fotos de I/O que se compiló en Flutter y Firebase para tomar una selfie con Dash. Ahora, es una app de código abierto, de modo que puedes profundizar en las prácticas recomendadas para la Web de Flutter y la compatibilidad web con los complementos de cámara, y puedes aprender cómo usamos las características de la nube a fin de generar publicaciones personalizadas en redes sociales.