Después de 30 días de actividades flutterianas, el 3 de marzo de 2021 se celebró el evento Flutter Engage en el que se presentaron las novedades de Flutter para su versión 2, con muchos cambios que se estaban esperando y que se han podido probar en la versión beta de este framework, que está soportado por Google. Vamos a repasar los cambios que han decidido añadir a esta versión y que podremos implementar si utilizamos y actualizamos la rama estable de Flutter.
Antes de nada, Flutter es un framework de desarrollo multiplataforma que fue presentado por Google en 2015 y lanzado de forma oficial unos años más tarde. Permite, al igual que otros frameworks, desarrollar para diferentes dispositivos con distintos sistemas operativos, pero lo hace con un enfoque diferente. Durante mis últimos años he utilizado Flutter para mi Trabajo de Fin de Grado y Máster. Esto me ha permitido ver todo el potencial que puede llegar a tener.
Desarrollo web
La primera gran novedad es la posibilidad de generar una versión web de un proyecto desarrollado con Flutter. Esta funcionalidad estaba disponible en la versión beta, pero por fin han terminado de refinarla y la han presentado al público. Han mejorado el rendimiento, la estabilidad y la accesibilidad de las aplicaciones y los widgets de las versiones web. Además, han añadido formas de interactuar con los elementos que solo se suelen encontrar en ordenadores. Por ejemplo, la selección múltiple con una tecla (command por ejemplo), los atajos del teclado, hacer zoom con el scroll del ratón, widgets con hipervínculos, rellenos de campos de texto y control sobre las URLs, entre otras. Han anunciado también que estas aplicaciones se podrán instalar en nuestros dispositivos en forma de Progressive Web Apps con el PWA manifest.
Para ver un ejemplo de cómo adaptar una aplicación y la forma de interactuar con la misma en diferentes plataformas y tipos de pantalla, han publicado una web en la que se puede descargar, probar y consultar el código de una aplicación adaptada. También han publicado otro ejemplo que contiene numerosas animaciones y que pretende mostrar cómo la versión web de Flutter se ve bien en diferentes navegadores.
Finalmente, han comentado que el renderizado se puede hacer de dos formas en la web: mediante HTML o CanvasKit. Por defecto, el renderizado HTML se utiliza para navegadores en dispositivos móviles ya que optimiza el tamaño de descarga y CanvasKit se utiliza para navegadores de ordenadores ya que está optimizado para pantallas largas.
En la ronda de preguntas han comentado que Flutter Web no soporta SEO aún. Están trabajando en ello y en la indexación, pero por el momento se han centrado en la experiencia de usuario y la eficiencia.
Desarrollo en plataformas de ordenadores
Esta funcionalidad aún no está en su versión estable, por lo que de momento no se recomienda su uso para lanzar proyectos en producción y solo se puede utilizar en las ramas beta. Se trata de la opción de generar aplicaciones nativas para Windows, macOs y Linux. Para esto han estado trabajando con equipos de Microsoft y Ubuntu, quienes aportan al desarrollo de Flutter para que la experiencia final sea la mejor posible.
Microsoft está aportando su solución para equipos multipantalla o dual-screen, con «Foldable Screen Support», pensado para sus dispositivos con pantalla plegable. También están desarrollando funcionalidades como drag-and-drop y widgets como TwoPane, que ayudará a los desarrolladores. Han publicado una web en la que se pueden ver los avances. Por otro lado, desde Microsoft han aportado numerosos pull requests que mejoran el uso de Windows Runtime para que las apps sean más eficientes en Windows.
El equipo de Ubuntu, por su parte, cree enormemente en el potencial de Flutter y pretenden utilizarlo para sus propias aplicaciones del sistema operativo. Han anunciado que van a cambiar Ubuntu Installer y lo van a lanzar desarrollado completamente con Flutter. Mientras tanto, están trabajando en que los paquetes existentes de Flutter sean compatibles con Linux para así poder acceder al Bluetooth, manejar la conectividad, configurar las notificaciones de escritorio, soporte multi-ventana…
Finalmente, se ha anunciado que Flutter va a estar disponible para sistemas embebidos. Toyota ha anunciado en la conferencia que van a utilizar este framework para los desarrollos futuros en sus coches, en los sistemas infoentretenimiento.
Null safety
Esta era una de las funcionalidades más esperadas. De la misma forma que el soporte web, el null safety se ha podido utilizar en las versiones beta, pero ahora forma parte de la versión estable de Flutter. Para no romper ningún desarrollo, han hecho posible que pueda coexistir el código que no sea null safe y con el que sí lo sea.
Han lanzado una herramienta para migrar el código existente a null safe (migration tool). Esta herramienta sugiere al desarrollador cambios en el código que puede aceptar poco a poco para adaptar la aplicación. También muestra los paquetes de las dependencias que no implementan null safety y sugiere versiones de los mismos que sí son null safe (si los hubiera). Una vez se haya implementado null safety en un proyecto, el compilador permite obligar a que siempre lo sea, es decir, el hecho de que puedan coexistir, no implica que una vez sea null safe el compilador no se encargue de que el proyecto lo siga siendo.
Como no podía ser de otra forma, han anunciado que sus paquetes de Firebase han sido actualizados para soportar null safety, por lo que se pueden seguir utilizándolos sin problema y la herramienta de migración propondrá las versiones de estos paquetes que sean adecuados.
Otras mejoras
Además de los tres grandes cambios anteriores, se han presentado otras mejoras en la conferencia. Una de ellas es Flutter Fix, una herramienta que ayuda a que las APIs de desarrollo sean más accesibles y ayuda a que el código sea más limpio. Se encarga de sugerir cambios al desarrollador para mejorar el uso de widgets y evitar el uso de código deprecado, siempre proponiendo cambios que no rompan el código.
Han añadido mejoras en Flutter Inspector que ahora muestra mensajes de alerta junto a errores. Esta alerta intentará llevar del error a una solución. Por ejemplo, cuando aparece un error de RenderFlex overflow en los widgets (cuando aparece la barra amarilla y negra), va a mostrar una alerta que llevará al desarrollador a Flutter Inspector, seleccionando automáticamente el widget que esté dando ese error y sugiriendo cambios posibles.
Además, también han añadido una funcionalidad en DevTools que permite ver cómo se divide el tamaño de la app y revisar cuánto ocupa cada asset o paquete que se esté utilizando.
Adicionalmente, han anunciado el soporte de anuncios de Google con el Google Mobile Ads SDK, lo que permite monetizar aplicaciones. Han anunciado el desarrollo, en fase beta, de un paquete que va a permitir tratar a los anuncios como un widget más, haciendo que se integren mejor en los ecosistemas y diseños de cada aplicación.
Finalmente, en la ronda de preguntas han comentado algunas cosas interesantes, como la mejora del soporte de los chips M1 de los nuevos Mac, el futuro lanzamiento de unos templates o plantillas que sugerirán las mejores prácticas para construir aplicaciones o la publicación de nuevos codelabs que integran todas las novedades presentadas.
Recursos
El evento, además de la conferencia inicial, nos dejó una serie de conferencias extra que profundizaban en algunas de las funcionalidades presentadas. Las charlas se centraban en cómo migrar una aplicación a null safety, cómo convertir una app móvil en una web app y cómo monetizar las aplicaciones con el nuevo SDK de Google Ads.
Además, han escrito un extenso post que explica detalladamente y con recursos extra todas las novedades que se han lanzado con Flutter 2.