Flutter: el presente de las aplicaciones móviles

Fabio César De Paz Vásquez

Estudiante de Ingeniería en Ciencias y Sistemas - USAC

Palabras Clave: Desarrollo de aplicaciones híbridas, Dart, Flutter, Google.

En el contexto de aplicaciones móviles, tomar una decisión sobre qué grupo de herramientas utilizar para crear aplicaciones nuevas, es una decisión bastante compleja, ya que, al existir distintos sistemas operativos, se requiere que las aplicaciones puedan ejecutarse de manera correcta en cualquiera de estas. Como consecuencia a esto, algunas personas tienden a inclinarse por implementar sus nuevos proyectos utilizando lo que se conoce como aplicaciones móviles híbridas. Para poder explicar y adentrarse en esta pequeña parte del universo del desarrollo, es necesario presentar contexto respecto a esto.

Imagen 1 - Fuente: Wikipedia, User: Senado Federal

Para el desarrollo móvil, se cuenta con tres distintas alternativas a elegir, como se describen a continuación:

  • Desarrollo nativo: A manera de simplificar su descripción, puede describirse como aquellas aplicaciones que son desarrolladas utilizando específicamente el lenguaje de la plataforma donde se ejecutan, por ejemplo: JAVA para Android o Swift para iOS. Esto podría complicar la situación de poder publicar la misma aplicación en distintas plataformas, ya que estas son excluyentes con los otros lenguajes nativos, lo que trae consigo el hecho de tener que realizar doble trabajo si se quisiera desarrollar para varias plataformas de manera nativa. Entonces, ¿por qué razones desarrollar de manera nativa?

    • Permiten mejorar el performance de la aplicación.

    • El look & feel que se logra generar es óptimo y su fluidez es evidente.

    • Es posible acceder a todos los componentes del dispositivo, como los sensores y actuadores.

  • Estas razones parecen ser convincentes para que los desarrolladores opten por esta alternativa, pero si se quiere realizar implementaciones de manera masiva e invirtiendo menos recursos, esta termina siendo una opción compleja y costosa, debido a esto han surgido las siguientes formas de implementación.

  • Desarrollo híbrido: Se trata de aplicaciones que se desarrollan implementando estándares de aplicaciones web, mediante HTML, CSS y JavaScript, que finalmente es renderizado en el teléfono mediante el uso de un framework específico (como lo puede ser PhoneGap, Ionic o Cordova). Esta parece ser una opción bastante viable, ya que realizando un único desarrollo es posible visualizar y ejecutar las aplicaciones tanto en ambientes web, como Android y iOS. Recientemente, este método es utilizado por muchas empresas y programadores a nivel mundial, ya que se ahorran el tiempo de desarrollo y reducen la complejidad del código, simplificándolo a una misma sintaxis y compilación. Estos frameworks ofrecen a los desarrolladores el acceso a funcionalidades nativas a través de ellos, pero como muchas cosas en el mundo, existen sus limitantes. Esto no quiere decir que sea de mala calidad, sino que de cierta forma no tienen acceso a todos los componentes del teléfono y además la fluidez visual no será la misma, debido a la existencia de una capa intermedia que se encarga de renderizar las vistas.

  • Desarrollo generado o bridged: Se trata del desarrollo a través de distintos frameworks que ofrecen su sintaxis y características para escribir el código, pero finalmente estas se encargan de traducir estas instrucciones hacia instrucciones del lenguaje nativo de la plataforma sobre la cual se ejecutan.

Teniendo esto en mente, es posible adentrarse un poco en lo que es Flutter2. Se trata de un framework de desarrollo de aplicaciones móviles creado por Google, teniendo su primer reléase al público en general en mayo de 2017, pero, presentando su primer reléase estable el 22 de febrero de 2019. Flutter se encuentra optimizado para crear aplicaciones tanto Android, como iOS y de manera novedosa, incluyen el sistema operativo en desarrollo propio de Google, Google Fuchsia.

Imagen 2 - Fuente: Flutter

Una de las características ofrecidas por Flutter, es que como código fuente utiliza el lenguaje Dart, que es un lenguaje de propósito general, también creado por Google y que se utiliza para construir aplicaciones en distintas plataformas, como web, de servidores, de escritorio e incluso aplicaciones móviles. Dentro de sus atributos es posible mencionar que se trata de un lenguaje orientado a objetos, que utiliza definición por clases, cuenta con su propio Garbage Collector y su sintaxis es similar al lenguaje C. Para describir de mejor manera Flutter, es necesario describir sus componentes:

  • Flutter engine: Es el core de Flutter, se encuentra desarrollado en C++ y proporciona soporte bastante amplio a bajo nivel del dispositivo, lo que permite el acceso al hardware del dispositivo. Se vincula de manera directa con los SDK de Android y de iOS.

  • Foundation library: Son componentes escritos en Dart, que pone a disposición de los programadores, para que puedan reutilizarlo, se trata de clases y funciones básicas que son requeridas para ejecutar Flutter, un ejemplo de esto serían las APIs utilizadas para hacer llamadas a su engine.

  • Widgets: El desarrollo de la interfaz de Flutter se basa en widgets. Cada componente visual que se puede apreciar es un widget. Dentro de las ventajas de Flutter, está en que es posible combinar distintos widgets con el objetivo de generar nuevas combinaciones, tal como las indique o requiera el programador. Dentro de los widgets se ofrece de manera original, los diseños visuales de Material Design (usado por Android) y de Cupertino (diseños usados por iOS).

Una vez descrito qué es Flutter y cómo es su arquitectura principal, el lector podría pensar: ¿por qué usar Flutter? ¿Por qué no simplemente utilizar algún otro framework de renderización web?1. Pues existen muchas respuestas a estas preguntas, tales como el soporte de la comunidad, el auge de este nuevo framework, lo cual se puede notar en su alta demanda3 mediante la imagen 3. Otro motivo, es el respaldo que ofrece Google, una empresa de gran trayectoria y actualización constante, quienes además brindan soporte técnico, implementación de nuevas características, y la frecuente reparación de posibles bugs. Todo esto suena bien, pero va un poco por encima de lo que es en realidad la ventaja principal de Flutter, por lo que se requiere una especificación más técnica: Flutter no utiliza un render de tipo web, en cambio, utiliza un canvas optimizado, en el que renderiza sus propios widgets con llamadas al sistema a bajo nivel, esto mediante la utilización de Dart.

Esto permite tener acceso a la mayor cantidad de hardware del dispositivo (sensores, cámaras, actuadores), teniendo una renderización visual casi natural que es compatible con los sistemas operativos antes mencionados. Todas estas características dejan a Flutter como un fuerte candidato a considerar, sin mencionar que ya está siendo implementado por Google, Google ADs, Tencent, y el gigante de ventas mundiales Alibaba, quien recientemente implementó Flutter para su aplicación móvil, y que cuenta con más de 50 millones de descargas.

Imagen 3 - Fuente: Google

Conclusiones:

  • El hecho de decidir entre qué tipo de implementación realizar, ya sea nativa, híbrida o generada, es una decisión importante que deben tomar los desarrolladores y encargados de sistemas, debiendo evaluar sus características ofrecidas y las necesidades que deben cubrir.

  • Flutter es un framework de desarrollo potente, de gran auge que permite a los programadores, simplificar el tiempo y complejidad del proceso de escritura de código.

  • La forma de generar aplicaciones a través de Flutter es lo más similar a una aplicación nativa, guardando los accesos a hardware y la fluidez de las interfaces gráficas, permitiendo además la generación de aplicaciones multiplataforma en un único código fuente.