Flutter como una solución de agilidad en desarrollos nativos.

Sofka Blog
Autor: Javier Hospital Melo.
Comparte

En Sofka uno de nuestros objetivos principales siempre ha sido la agilidad y la calidad en nuestros desarrollos. Durante varios años de experiencia hemos encontrado en el mundo mobile la oportunidad de ofrecer desarrollos más ágiles a menor costo. Uno de nuestros casos de éxito es una de las cajas de compensación más importantes a nivel nacional, en donde el uso de la tecnología multiplataforma conocida como flutter, ha sido pilar importante para lograr la implementación de una aplicación móvil para el sector salud en tabletas y dispositivos de pantalla grande.

Recientemente en nuestros nuevos proyectos con un reconocido grupo del sector de ventas y retailers, se dió la oportunidad de probar una nueva implementación que podría ayudar a mejorar el rendimiento y la agilidad del desarrollo de una aplicación nativa. Como bien es sabido el desarrollo de una aplicación nativa requiere de dos frentes de desarrollo que estén dedicados específicamente a implementaciones en Android y iOS, esto principalmente significa tiempos y costos elevados. Además de otros problemas de regresión que podrían hacer más lento aún el testeo de toda la aplicación ya que de nuevo toca probar todas las características que tiene la app.

Para ello el equipo de desarrolladores de Sofka propusieron la posibilidad de trabajar con flutter mediante la integración de un módulo que cargue todas las nuevas funcionalidades y que estas mismas sirvan para integrarse como nuevas características que lleguen a las aplicaciones con un solo desarrollo y sin la necesidad de destinar múltiples equipos multiplataforma para que puedan trabajar en la misma funcionalidad. Con esta nueva manera de trabajo modular se aprovecharán las ventajas de usar flutter sin la necesidad de rehacer la aplicación, sino ir integrando nuevos módulos reutilizables que sirvan a futuro en una implementación desde cero hecha en flutter.

Para poder integrar esta manera de desarrollo en una aplicación móvil nativa, se debe hacer uso de Flutter Engine el cual carga el módulo en la aplicación y asimismo este módulo puede cargar cada uno de los sub módulos desarrollados en flutter que se llamarían desde la aplicación nativa y permiten la inter navegabilidad entre la parte nativa de la aplicación y la parte híbrida de flutter, permitiendo una comunicación de doble vía, a continuación se muestra un diagrama de como funciona esta arquitectura de desarrollo  en una aplicación nativa hecha en iOS o Android.

Flutter
En el anterior diagrama se puede ver como los submódulos Flutter están desarrollados en proyectos diferentes dentro del módulo principal, se puede hacer referencia a ellos mediante llamado a la librería y se cargan como tal. También es posible gracias a la comunicación en dos vías poder hacer uso de métodos ya creados en la aplicación nativa, como por ejemplo casos de uso ya creados para el consumo y escritura en un documento de Firebase. 

Ventajas y desventajas

En cuanto a la arquitectura y la manera de trabajar se pudieron encontrar las siguientes ventajas y desventajas, en relación a un  posible trabajo de integración.

Ventajas:

  1. Desarrollo ágil, paralelo y multiplataforma; una de las grandes ventajas de esta manera de desarrollar es que dos desarrolladores que antes estaban destinados a trabajar una misma funcionalidad en iOS y Android, ahora pueden estar desarrollando diferentes funcionalidades que pueden ser usadas tanto en iOS como en Android. Asimismo cada funcionalidad estaría en un repositorio Git aparte en el que podrían asignarse entre equipos.
  2. Los módulos se pueden reutilizar e integrar en otras aplicaciones diferentes; gracias a que el módulo general de Flutter queda compilado como librería para iOS y Android, esta sólo se importaría y se haría uso de ella en el contexto que se quiera de la aplicación.
  3. No se requiere hacer pruebas de regresión de funcionalidad de toda la aplicación; y esto es básicamente debido a que los desarrollos son tan aislados que la única parte que se probaría de la aplicación sería la nueva funcionalidad y los flujos asociados a esta misma.
  4. Rendimiento nativo, debido a que el motor de flutter es excelente, se disfrutaría de un performance igual al nativo, que no afectará  la experiencia de usuario.
  5. Integración con pruebas y flujos DevOps, gracias a que flutter tiene un robusto desarrollo detrás, es posible integrar las nuevas funcionalidades que se hagan con flujos en Azure u otros proveedores de Cloud para asegurar la calidad de cada uno de los mismos.

Desventajas:

  1. El peso de la aplicación podría verse incrementado: el equipo de Flutter ha ido implementando mejoras constantes para mitigar esta brecha.
  2. Dependencia de librerías: es posible que algunas funcionalidades específicas requieran de librerías que puedan generar conflicto en la integración, pero podría ser solucionado al integrar la librería en la parte nativa y comunicarse con ella gracias a la comunicación de dos vías.

A partir de la experiencia con el grupo de ventas y retailers, se utilizó la manera de implementar mencionada anteriormente para un réplica de una funcionalidad ya existente en una de las aplicaciones; y se logró la correcta integración de las secciones con servicios ya existentes en la aplicación conectados a firebase y también la réplica de la experiencia en interfaz gráfica y de usuario; ambas características finalizadas satisfactoriamente. Dentro del mismo desarrollo se asignaron dos desarrolladores que hicieron tareas de diseño y de implementación paralelas; lo que antes podría llevar más tiempo al tener que ser implementadas en distintas plataformas con código fuente diferente, ahora se puede hacer con solo una integración. 

En cuanto al performance y la rapidez de inicio del módulo, fue imperceptible la parte nativa y se logró comunicar y hacer varias operaciones como lanzar nuevas páginas nativas sin necesidad de cerrar el módulo flutter para poder lanzarlas, quedando en el árbol de navegación sin generar algún problema.

Para finalizar, en cuanto a posibles trabajos futuros con este tipo de implementaciones, queda como tarea para otro artículo, describir la mejor manera de reutilizar estos módulos para empresas multimarca que quieran llevar a otras aplicaciones sin necesidad de volverlos a desarrollar, y también la reutilización de estos módulos en proyectos flutter hechos desde cero.

 

Últimos artículos