¿Qué es Flutter y cómo funciona?

Autor: | Última modificación: 20 de enero de 2022 | Tiempo de Lectura: 4 minutos
Temas en este post:

Para el programador, la mejor herramienta para el desarrollo mobile es siempre la misma: la que conocemos y nos gusta, punto pelota. Para la inmensa mayoría de nosotros, esto quiere decir desarrollo nativo, ya sea con Swift y con Kotlin. Además, tenemos muy buenos argumentos para defender nuestro punto de vista: aporta el mejor rendimiento, el mejor resultado estético y acceso completo a todas las funcionalidades de los sistemas operativos.

Sin embargo, a veces conviene mirar el punto de vista de la empresa, y aquí la certeza absoluta de antes se tambalea un poco. Las ventajas ya mencionadas del desarrollo nativo son incuestionables, pero hay algo más que también resulta incuestionable: tener a dos equipos caros haciendo básicamente lo mismo es un coste difícil de justificar, no sólo desde el punto de vista económico, sino operativo: es muy difícil lograr que ambas apps esté a la par en cuanto a funcionalidades.

React Native, Ionic, Cordoba, etc: Todos intentaron y fallaron

Hasta aquí, nada nuevo. Este problema se ha intentado resolver miles de veces en el pasado y el cementerio está lleno: Ionic, Cordoba, Appceleretor y otros muchos. Algunos aún no están en el cementerio, están en la UVI, pero tienen el nicho listo, como ReactNative o Xamarin. 

Parece que el problema no tiene solución, pero hay un recién llegado que parece que podría cambiar esto: Flutter.

¿Para qué comprarte una camioneta cuando puedes hacer esto?
¿Para qué comprarte una camioneta cuando puedes hacer esto?

La mayoría de los cadáveres mencionados tienen dos cosas en común, y posiblemente ahí esté la raíz de su fracaso:

  • Son herramientas “extranjeras” (mayoritariamente web) metidas con calzador en un entorno completamente distinto. Se basan en la idea, errónea, de que hacer un App para la web es lo mismo que una para un móvil y que lo único que cambia es el tamaño de la pantalla.
  • El approach a los kits gráficos es el mismo de reciclaje: o se intentan usar los widgets nativos (lo cual es muy complejo para el creador de la framework) o lo replican con el mínimo denominador común: html y css.

Lo que ambas decisiones demuestran, es una falta absoluta de compromiso con la plataforma de destino, no se crea nada específico y se apaña con piezas prestadas y pegadas con cola de zapatero. Es decir, se está intentado hacer un pulpo injertándole otras cuatro patas a un perro.

El viejo truco de la ñapa para salir al paso lo antes posible.
El viejo truco de la ñapa para salir al paso lo antes posible.

¿Qué es Flutter?

Aunque es incuestionable que hay cierta influencia de la web, al fin y al cabo Dart fue creado en su momento como una alternativa cuerda a Javascript, Flutter es un desarrollo 100% nuevo, diseñado primordialmente para el desarrollo móvil. 

Otra de las razones de su superioridad, es (sorprendentemente) que descarta por completo los widgets nativos y los replica desde cero mediante OpenGL (sin ñapas de html / css), usando la framework Skia de Google.

Replicar y mantener actualizados todos los elementos de dos entornos gráficos es una tarea ingente, que sólo una empresa con los recursos de Google podría abordar. Además, es algo tan aburrido que ningún proyecto de código abierto basado sólo en voluntarios podría llevar a cabo. Es el tipo de tarea que nadie haría si no le pagasen y bien.

Interfaces declarativas

Otra característica interesante de Flutter es el approach declarativo a la definición del UI. Se trata de una metodología que aunque tiene una barrera de entrada no desdeñable (cuesta pillarle el truco), permite a la larga crear Apps mucho más complejas sin que la complejidad del código se desborde. 

Es de hecho, el nuevo estándar y tanto Apple como Google han copiado dicho approach en SwiftUI y Compose. En muy poco tiempo, independientemente de la plataforma y las herramientas, todos estaremos creando nuestras UIs de forma similar. 

Dart: bueno, bonito y barato

Otro de los puntos fuertes del stack de Flutter, es el lenguaje elegido: Dart. Relativamente poco conocido, es un lenguaje sencillo y diseñado para sorprender lo mínimo posible al recién llegado. En poco tiempo te sentirás a gusto si vienes de algún lenguaje OOP clásico y también si vienes de Swift y Kotlin, dados algunos añadidos recientes.

Se trata de una elección muy acertada por parte de Google, ya que se adapta muy bien a la tarea de crear UIs de forma declarativa, y el disponer de una VM muy dinámica, permite cambiar el código en tiempo de ejecución sin recompilar ni volver a arrancar la App. Esto nos permite el famoso “hot-reload”: muchos de los cambios en tu código se ven reflejados de inmediato en la App que estás depurando, sin tener que recompilar.

Es decir, se trata de un lenguaje fácil de aprender, pero que no resulta aburrido y con el que se pueden hacer, si quieres, grandes virguerías.

Además, la VM sólo se utiliza durante el desarrollo. Para desplegar, la aplicación se compila a código nativo ARM y tiene un rendimiento excelente.

¿La muerte del desarrollo nativo?

No, por supuesto que no. Lo que sí es Flutter, es una herramienta más, que en este caso viene para quedarse. Para una app sencilla, tipo CRUD, es posiblemente la forma más barata de salir al mercado en ambas plataformas y con calidad. 

Por supuesto que una App más compleja que requiera de una interfaz más estrecha con el hardware del móvil, se hará mucho mejor con Swift y Kotlin. Sin embargo, la mayoría de las apps que hay en el mercado ahora mismo (lamentablemente) se limitan a un CRUD bonito.

¿Cómo aprender Flutter?

En resumidas cuentas, animaría a cualquier desarrollador mobile, ya sea Android o iOS, a aprender Flutter: es una excelente herramienta para llevar en la mochila.

De hecho, en nuestro Desarrollo de Apps Móviles Full Stack Bootcamp, cuyo plato principal es y seguirá siendo el desarrollo nativo, ya tenemos desde hace un año  un módulo de Flutter. Conoce cada detalle descargando el temario aquí.

[email protected]