Consultoría & Consultores

Estamos en casa, llaman a la puerta y aparece un comercial de alguna compañía energética con una tablet buscando cómo poder hacernos más felices con una oferta. Viajando en el tren vemos en nuestro móvil Android un capítulo de una serie de Netflix que habíamos dejado a medias en nuestro SmartTv. Salimos a correr y tenemos en nuestro smartwatch una aplicación registrando nuestras marcas que después podremos ver en nuestra tablet o en nuestro MacBookPro. Todo está conectado y disponible para interactuar.

Este escenario hace que, desde el punto de vista de desarrollo software, se tenga que realizar un gran esfuerzo en desarrollar programas para diferentes plataformas y sistemas operativos. Y si nos centramos en la interacción con el usuario y sus interfaces, el esfuerzo sigue creciendo al intentar mantener una UI homogénea y agradable para el cliente.

Las nuevas tendencias de mercado y la necesidad de reducir el "time-to-market" hacen que exista una búsqueda continua por minimizar la inversión que se realiza al crear y mantener aplicaciones en las diferentes plataformas.

Fruto de esta necesidad, e intentando aportar algo diferencial, nace Flutter.

Google Flutter

¿Qué es Flutter?

Flutter es un framework open-source de Google para crear, inicialmente, aplicaciones nativas para iOS y Android, aunque a día de hoy, tiene múltiples proyectos "satélite" para que también tenga como destino aplicaciones Linux, Windows, MacOS, Web y Fuchsia (futuro sistema operativo para móviles de Google). Su primera versión oficial se liberó el 4 de diciembre de 2018 y recientemente ha liberado su versión 1.2.

Para desarrollar en Flutter, tenemos que hacerlo con el lenguaje Dart, un lenguaje de programación de código abierto y desarrollado por Google. A modo de resumen, está orientado a objetos, tiene máquina virtual propia (DartVM) con una sintaxis parecida a Java, aunque con un concepto de trabajo más cercano a JavaScript.

Principales características de Flutter

  • Permitir un desarrollo de alta velocidad: el framework está desarrollado para permitir un "Hot Reload" (orientado a estados) real y muy rápido que reduce el tiempo de espera de desarrolladores. Por ejemplo, estamos desarrollando un proceso de venta de un producto bancario de varios pasos y durante nuestro desarrollo, en uno de los pasos finales, realizamos un cambio; las plataformas de desarrollo nativas nos obligarían a iniciar el flujo desde el principio mientras que Flutter nos permite relanzar el desarrollo en el paso en el que estábamos manteniendo todo el estado de la aplicación hasta el momento.
  • Diseño orientado a widgets: un widget en Flutter es un componente visual que proporciona una funcionalidad (botones, contenedores, imágenes, barras de aplicación, etc.). La mayoría de estos widgets están bajo Material Design (estética Android) aunque también hay un conjunto de widgets con diseño Cupertino (estética iOS).
  • Diseños expresivos y flexibles: facilita el diseño para los múltiples formatos de visualización que los dispositivos exigen y proporciona interfaces de usuario atractivas.
  • Experiencias de alta calidad: desarrollamos una aplicación Flutter en Dart y el framework finalmente genera código C/C++, que será el que interactúe con las partes específicas de cada una las plataformas (iOS y Android).

Si queremos desarrollar en Flutter, tenemos que tener claro que no tiene entorno propio de desarrollo como tal, pero sí existen plugins para IntelliJ, Android Studio y Visual Studio Code.

Los competidores de Flutter

Comparando Flutter con otros frameworks con el mismo propósito (generación de aplicaciones multiplataforma), podemos encontrar ionic, React Native y Xamarin.forms, entre otros. Pero antes de entrar en las odiosas comparaciones, encuadremos brevemente a cada uno de ellos:

  • ionic: se trata de un framework para desarrollo de aplicaciones híbridas (desarrollo multiplataforma bajo HTML+CSS+JavaScript) ejecutando el código en un "web view" nativo. Aunque está oficialmente integrado con Angular, también se pueden usar otros frameworks de desarrollo (como Vue o React) y también sin framework alguno. A partir de su versión 4 se ha orientado a Web Components, dotándolo de mucha versatilidad a la hora de reutilizar componentes desarrollados bajo diferentes frameworks de FRONT.
  • React Native: conocido framework de desarrollo de aplicaciones nativas (iOS y Android) desarrollado por Facebook. Se desarrolla en JavaScript y se usa NPM como gestor de paquetes. A diferencia de ionic, el código de React Native no se ejecuta en un web view, sino que genera código nativo (de hecho, en una misma app, pueden y suelen convivir código JavaScript y código nativo; aunque esta situación no sea la más deseada). No tiene límite en el acceso a recursos nativos.
  • Xamarin.forms: al igual que React Native, Xamarin.forms es un framework de desarrollo de aplicaciones nativas (iOS, Android y UWP). Para desarrollar se utiliza C# y expone un conjunto de componentes de interfaz de usuario que pretenden unificar la UI para las diferentes plataformas, favoreciendo el "write-once-run-anywhere" que se busca en este tipo de frameworks.

Sin entrar en grandes detalles técnicos podríamos decir que:

- Tanto ionic, React Native y Flutter utilizan Dart, que tiene ciertas similitudes con JavaScript.

- Xamarin.forms y Flutter comparten ciertas similitudes en el planteamiento de la estructura interna del framework, así como la orientación a "widgets".

- Flutter, Xamarin.forms y React Native tienen un mejor rendimiento al ejecutar código nativo de forma directa, mientras que ionic tiene un rendimiento menor al ejecutarse en un web view.

- Al realizar desarrollo web sobre ionic, éste se posiciona como el mejor en cuanto a versatilidad a la hora de generar interfaces de usuario atractivas.

El futuro de Google Flutter

Después de llevar un tiempo siguiéndole la pista a Flutter, podríamos adoptarlo como framework de desarrollo para:

  • Apps en las que se necesite un rápido y efectivo resultado sin necesidad de funcionalidades poco comunes.
  • Apps que se tengan que desarrollar para múltiples plataformas.
  • Apps que tengan una alta carga visual, pero sin desarrollos ad-hoc.

De igual modo, no utilizaría Flutter en:

  • Apps web progresivas o Apps instantáneas: Flutter puede llegar a generar apps pesadas.
  • Apps que se comuniquen con hardware (p.e. las conexiones BLE deben ser implementadas bajo nativo, NFC, SIRI, USB OTG, wallets, etc.).
  • Apps con dependencias de librerías nativas desconocidas, dado que puede que tengan algún problema de compatibilidad o soporte.

La reciente liberación de Flutter hace que, a día de hoy, haya aumentado el número de búsquedas en Google, así como el número de entradas en foros técnicos como Stack Overflow. Aunque tiene presencia en la web, competidores del desarrollo multiplataforma (como ionic o React Native), le llevan bastante ventaja.

Flutter proporciona muchas ventajas pero no está en posición de desbancar a los frameworks nativos debido a las limitaciones en cuanto a la interacción con hardware, así como por las limitaciones en cuanto a "customización" de componentes.

Con respecto a sus competidores, dada la facilidad de desarrollo, Flutter puede ser la mejor opción si queremos generar un producto rápido y visual, pero no llega a tener el grado de madurez de cualquiera de ellos.

Como conclusión, Flutter es una gran apuesta de futuro y un framework al que hay que seguirle la pista, sobre todo si se confirma como SDK para el futuro sistema operativo Google Fuchsia.

Antonio Jesús Ocaña