Flutter vs React Native vs Kotlin Multiplatform

- Andrés Cruz - EN In english

Flutter vs React Native vs Kotlin Multiplatform

En el desarrollo de aplicaciones, siempre aparece una tecnología que puede facilitar el desarrollo, en el desarrollo móvil todo se complica ya que, todo el proceso funciona en una sola capa o con una misma tecnología, además de estar tratando con un dispositivo con capacidades reducidas tanto de pantalla como de autonomía, si ha esto le sumamos la gran cantidad de variantes de dispositivos el desarrollo puede complicarse. y es por eso que tenemos formas de abstraer y simplificar el proceso de creación de aplicaciones sin sacrificar la calidad. Dos opciones que han ganado popularidad en los últimos años son FlutterKotlin Multiplatform (KMP). Ambas prometen la codificación eficiente y la creación de aplicaciones multiplataforma, pero ¿cuál es la mejor opción opción? En este artículo intentaremos dar algunas luces y opiniones sobre este tema.

Flutter y React Native

Flutter y React Native son dos de las grandes bibliotecas que tenemos disponibles para crear aplicaciones para Android e IOS, aunque podemos emplear los proyecto de Flutter no solo para móvil si no para Web, Windows, Linux y MacOS que es un increíble agregado, aun así su esencia principal es la de desarrollo móvil, en entrada veremos una comparativa vamos a conocer las fortalezas, debilidades y diferencias clave entre Flutter y React Native para el desarrollo de aplicaciones móviles en iOS y Android que son las que permiten desarrollar ambas tecnologías.

Tanto Flutter como React Native son populares frameworks de desarrollo multiplataforma que permiten a los desarrolladores crear aplicaciones móviles para iOS y Android simultáneamente. Veamos las características principales de cada uno de ellos:

Flutter

  • Desarrollado por Google, Flutter es un framework de código abierto.
  • Utiliza el lenguaje de programación Dart.
  • Destaca por su motor de renderizado de alto rendimiento y su interfaz de usuario precisa.
  • Ofrece un conjunto rico de widgets personalizables.
  • Admite la recarga en caliente o hot reload para iteraciones de desarrollo más rápidas.
  • Ha ganado terreno en los últimos años y es utilizado por empresas como Alibaba, Tencent y Google Ads.
  • La integración de Flutter y Dart es perfecta al ser desarrollado Dart específicamente para Flutter.

React Native

  • Creado por Facebook, React Native existe desde 2015.
  • Utiliza JavaScript para el desarrollo.
  • Basado en la arquitectura Flux y Redux.
  • Cuenta con una amplia biblioteca de componentes.
  • Conocido por su ecosistema maduro y su adopción generalizada por grandes empresas como Instagram, Facebook y Tesla.

¿Qué es React Native? 

Creado por Facebook, React Native vio su primer lanzamiento de vista previa en 2015. Permite el desarrollo multiplataforma en las siguientes plataformas:

  1. iOS
  2. Android
  3. Windows
  4. Mac OS

Además, es fácil migrar las aplicaciones React Native a la web. Esto se debe a que React Native usa JavaScript y comparte su arquitectura con React.
Tenga en cuenta que las aplicaciones React Native son en realidad aplicaciones nativas. Utilizan componentes de interfaz de usuario nativos. Esto es diferente a Ionic y Cordova, que son envoltorios para aplicaciones web.
Las aplicaciones populares que utilizan este marco incluyen Instagram, Facebook, Skype, Pinterest o Afterpay. Al igual que Flutter, React Native ofrece un escaparate oficial.

Comparación de Rendimiento

Flutter

  • Alto rendimiento gracias a su compilación AOT (Ahead-of-Time).
  • Renderiza componentes de IU en el lado de Flutter, lo que garantiza una respuesta rápida.
  • Tamaño de paquete más pequeño para aplicaciones Android (tan solo 4,7 MB).

React Native

  • Rendimiento más lento debido al puente JavaScript.
  • Depende de la ejecución en tiempo de ejecución de JavaScript.
  • Mayor tamaño de paquete.

Curva de Aprendizaje

Flutter

  • Fácil de aprender, especialmente si ya conoces React o JavaScript.
  • Documentación completa y amigable para principiantes.

React Native

  • Requiere una curva de aprendizaje, especialmente para desarrolladores nuevos en JavaScript o React.
  • La familiaridad con React ayuda.

Ventajas de Flutter

  • Dart es fácil de aprender. Especialmente para desarrolladores acostumbrados a lenguajes como Java, Kotlin, Swift y C #.
  • Flutter facilita la personalización de la interfaz de usuario gracias al enfoque de los widgets personalizables.
  • Es fácil mantener la apariencia de su aplicación en dispositivos más antiguos gracias a la biblioteca de widgets.
  • Flutter está experimentando un rápido crecimiento y tiene una comunidad entusiasta.
  • Con el reciente lanzamiento de Flutter 2.0, las aplicaciones web y de escritorio ahora tienen soporte completo.
  • Los tiempos de desarrollo de la aplicación son generalmente bajos cuando se usa Flutter.

Ventajas de React Native

  • JavaScript es bien conocido. Es más fácil encontrar desarrolladores que estén familiarizados con él.
  • Portar una aplicación web existente de React a React Native es sencillo.
  • React Native lleva más tiempo en el mercado (más de seis años)
  • La comunidad de React es enorme.
  • El código se reutiliza fácilmente entre proyectos web y móviles.

Ventajas compartidas

  • Hay una cantidad increíble de recursos educativos disponibles para ambos frameworks.
  • Ambos marcos ofrecen paquetes para ampliar la funcionalidad. Flutter usa pub mientras que React Native usa npm.
  • Una función de recarga en caliente está disponible en ambas plataformas. Esto permite a los desarrolladores ver sus cambios de código al instante.
  • Ambos marcos ofrecen opciones para las pruebas

Desventajas de React Native

  • Menos componentes listos para usar
  • React Native solo admite componentes básicos listos para usar (muchos de ellos se adaptan a una plataforma adoptando el diseño de la misma; como el botón, picker, entre otros).
  • Hay repositorios externos con muchos componentes adicionales para React Native. Un desarrollador puede usarlos en un proyecto, pero eso requiere esfuerzo y tiempo adicionales.

Por otro lado, Flutter está diseñado para admitir Material Design listo para usar, por lo que el marco admite muchos más widgets. Ahorra tiempo. Un desarrollador que usa Flutter puede crear la mayoría de las vistas con widgets prefabricados que son fácilmente personalizables y compatibles entre plataformas.

  • Libertad de elección del desarrollador: Una vez que un desarrollador ha creado un nuevo proyecto, debe decidir qué paquete de navegación, así como qué administración de estado global, usar.
  • Puede llevar mucho tiempo comprender los matices de cada solución y, en última instancia, decidir cuáles son las mejores para utilizar en el proyecto.
  • Muchos paquetes abandonados: React Native cuenta con una enorme cantidad de bibliotecas. Desafortunadamente, muchos de ellos son de baja calidad; o han sido abandonados por completo.
  • IU frágil: El hecho de que React Native utilice componentes nativos bajo el capó debería darle la confianza de que, después de cada actualización de la interfaz de usuario del sistema operativo, los componentes de su aplicación también se actualizarán instantáneamente.
    • Dicho esto, esto puede romper la interfaz de usuario de la aplicación, esto en lo personal siempre he notado que es un problema cuando cometes errores de sintaxis, que la aplicación crashea y tienes que levantarla nuevamente.
    • Mientras que cuando se trata de Flutter (gracias a la forma en que el marco recrea los componentes nativos por su cuenta), la interfaz de usuario de la aplicación es mucho más estable.
    • Las aplicaciones son más grandes que las nativas:
      • Las aplicaciones escritas en React Native deben poder ejecutar código Javascript (máquina virtual JavaScript). Android no tiene esta funcionalidad de forma predeterminada, lo que significa que las aplicaciones deben incluir una biblioteca que admita código JavaScript, lo que da como resultado aplicaciones que son más grandes que sus contrapartes nativas de Android.
      • Las aplicaciones de iOS creadas con React Native no presentan este problema, pero todavía suelen ser más grandes que las nativas. ¿Las buenas noticias? Como mencionamos antes, el equipo de React Native está trabajando para reducir el tamaño de sus aplicaciones.

Flutter vs React

Esto puede ser algo contradictorio y el razonamiento de cuál emplear depende mucho de las tecnologías que manejes:

  • Si te encanta el JS y has trabajado con React o Vue obviamente Flutter será más difícil de aprender que React Native o Vue Native. Principalmente porque React Native usa JavaScript, mientras que Flutter usa Dart
  • Pero lo contrario también es cierto: si tienes experiencia en Dart, entonces aprender Flutter será sencillo de entender.

Otros razonamientos:

  • Los componentes de React Native son bastante básicos, por lo que si necesita algo adicional, se requiere un esfuerzo considerable al diseñar. Solo unos pocos componentes se adaptan a la plataforma, mientras que la mayoría de las veces tienes que usar un componente diferente tanto para iOS como para Android; o, estilícelo de manera diferente.
  • Por otro lado, con Flutter, todo es un widget. Y los widgets se basan en Material Design, lo que los hace fácilmente personalizables. La mayoría de los widgets son adaptables y puede usar el mismo widget tanto en Android como en iOS.
  • Cuando se trata de rendimiento, Flutter tiene la ventaja, ya que está compilado en bibliotecas nativas ARM o x86, lo que lo hace realmente rápido. React Native no está compilado en código nativo y todavía tiene la capa de JavaScript, lo que lo hace menos eficiente que Flutter.
  • React Native es solo una envoltura de los métodos nativos, por lo que requiere un puente para traducir esas llamadas a una API nativa; esto se convierte en un cuello de botella cuando se realizan muchas llamadas nativas pero con Flutter, nunca tendrá que preocuparse por el problema, ya que la capa de vista se representa como lo sería un juego, y como todos los componentes están diseñados por ingenieros de Flutter, hay menos llamadas nativas al puente.
  • Los componentes de React Native no siempre son lo suficientemente personalizables, ya que son simplemente envoltorios de vistas nativas. Entonces, digamos que alguien decidió no ajustar un determinado método, entonces no tendrá acceso a él (por ejemplo, los bordes discontinuos alrededor de una vista no funcionan), mientras que los nuevos componentes lanzados por Google y Apple pueden demorar mucho tiempo en estar disponible en React Native.

Ecosistema

Flutter

  • Aún está madurando, en cada versión mayor va mejorando el desempeño e incorporando nuevas características como soporte a otros modos como web o escritorio.
  • Utilizado en producción por varias grandes empresas.
  • Menos paquetes disponibles en comparación con React Native.

React Native

  • Ecosistema maduro con numerosos paquetes disponibles.
  • Ampliamente utilizado en producción por empresas de todo el mundo.

En definitiva, todo depende del proyecto a llevar a cabo, al tener Flutter una empresa como Google que también es dueña de Android la integración y futuro es perfecta, pero, si eres desarrollador en JavaScript e inclusive empleas React posiblemente React Native puede ser un gran compañero para ti.

Cuándo elegir React Native y cuándo elegir Flutter

  1. La entrega de proyectos a tiempo es uno de los aspectos más críticos del desarrollo de aplicaciones web y móviles.
  2. La naturaleza multiplataforma de React Native y Flutter reduce el tiempo de comercialización. Además, sus bibliotecas de terceros y componentes listos para usar hacen que sea más eficiente usarlos para crear su aplicación.
  3. Mejor aún, Flutter y React Native ofrecen más que un desarrollo rápido, también pueden reducir los costos del proyecto.

… Y estas son las razones clave por las que debería considerar cualquier marco para su proyecto. Pero, ¿qué solución ofrece el tiempo de desarrollo más rápido? ¿O encaja mejor con la idea de tu aplicación?

 

Bueno, eso depende de las características específicas de su proyecto y del equilibrio de las habilidades de su equipo.

  1. ¿Tus desarrolladores conocen Dart? Si es así, programar con Flutter será un paseo.
  2. ¿Sus desarrolladores dominan JavaScript? Si es así, entonces React Native parece la mejor opción.
  3. ¿Desea crear la GUI de su aplicación con componentes nativos de la interfaz de usuario? Si es así, elija React Native.
  4. ¿Es el diseño de marca su prioridad? En caso afirmativo, sugerimos que Flutter se ajuste a sus necesidades.
  5. Recuerda que cada aplicación es diferente, por lo que debes considerar cada una por sus propios méritos. Siempre vale la pena discutir su proyecto con un equipo experimentado de desarrolladores: personas capaces de considerar los diferentes enfoques, con un conjunto de habilidades lo suficientemente variado cuando se trata de desarrollo multiplataforma, como si buscara el consejo de programadores que conocen solo un marco, ellos Probablemente te guíe a usar esa herramienta.
  6. Por lo menos, confíe en esto: tanto Flutter como React Native son muy buenas tecnologías. Se benefician de una gran popularidad y una confianza duradera.

Dart vs JavaScript

 Dart es un lenguaje fuertemente tipado que usa la herencia clásica. Es fácil de aprender para los desarrolladores que han usado lenguajes similares como Java, Swift, Kotlin y C #. Hay muchos patrones de diseño probados que han resistido la prueba del tiempo y funcionan bien con los proyectos de Flutter.
JavaScript es uno de los lenguajes de programación más conocidos. Si le preocupa su naturaleza poco tipada, TypeScript también es una opción compatible.

Una pregunta que se le hace a menudo al equipo de Flutter es por qué eligieron Dart en lugar de JavaScript.

La respuesta es simple: Dart proporciona la flexibilidad de un lenguaje interpretado al mismo tiempo que ofrece un rendimiento compilado.
Ambos lenguajes tienen sus ventajas e inconvenientes. El factor decisivo aquí es probablemente el conjunto de habilidades de su equipo de desarrolladores.
Interfaz de usuario nativa frente a widgets renderizados
React Native utiliza los componentes nativos de la interfaz de usuario incluidos en iOS y Android. Cuando esos elementos cambian como parte de una actualización del sistema operativo, su aplicación también se actualiza. Esto puede reducir la necesidad de nuevas versiones, pero también tiene el potencial de romper su aplicación.
Flutter renderiza todos los widgets desde cero en tu pantalla. Puede crear interfaces nativas utilizando las bibliotecas de widgets de Material Design y Cupertino. Ambas bibliotecas se adhieren a sus respectivos estándares de diseño. El resultado es que el usuario no se da cuenta (o no le importa) de que no ve los elementos nativos de la IU.

La desventaja del enfoque de Flutter es que la interfaz de usuario "antigua" todavía se usa después de las actualizaciones importantes del sistema operativo.

Afortunadamente, el equipo de Flutter actualiza rápidamente las bibliotecas. "Actualizar" su aplicación es sencillo.

El beneficio del enfoque de Flutter es que tienes un control total sobre el aspecto de tu aplicación. 

¿Tiene un diseñador que insiste en que una sombra paralela debe ser dos píxeles más ancha? Con Flutter, este es un cambio simple.

Esto también facilita la creación de interfaces impulsadas por la marca de su organización. Todos los widgets de la biblioteca de Flutter se pueden personalizar.  

Puedes desarrollar sus propios widgets personalizados si es necesario.

Flutter vs Kotlin Multiplatform

¿Qué es Kotlin Multiplatform?

Kotlin Multiplatform (KMP) es una solución de desarrollo multiplataforma creada por JetBrains. Utiliza el lenguaje de programación Kotlin y permite compartir lógica de negocios entre plataformas, mientras que las partes específicas de la plataforma se implementan por separado. KMP se compila en código nativo, lo que ofrece un rendimiento cercano al nativo.

Ventajas de KMP

  1. Compartir Código: KMP permite compartir lógica de negocios entre Android, iOS y otras plataformas. Si ya tienes proyectos Android escritos en Kotlin, puedes integrar KMP fácilmente, KMP se enfoca en compartir la capa de lógica de la aplicación, lo que permite reutilizar el código en diferentes plataformas.
  2. Rendimiento Nativo: Al compilar en código nativo, KMP ofrece un rendimiento similar al de las aplicaciones nativas.
  3. Integración con Proyectos Existentes: Puedes usar KMP junto con proyectos Android existentes escritos en Kotlin. Esto facilita la transición y la reutilización de código.
  4. Kotlin multiplataforma logra un rendimiento similar al de las aplicaciones nativas mediante el uso de componentes de interfaz de usuario específicos de la plataforma. Esta característica es especialmente importante para aplicaciones que consumen muchos recursos.
  5. Acceso a API nativas: los desarrolladores que utilizan Kotlin Multiplatform pueden acceder fácilmente a funciones y API específicas de la plataforma.

Desventajas de usar Kotlin multiplataforma

Como cualquier tecnología, KMP también tiene algunos inconvenientes o limitantes, como lo sería una configuración del proyecto más compleja que en el caso de Flutter.

También es necesario crear código específico para cada plataforma, ya que, la lógica de negocios es la implementación común para cada plataforma; esto trae como problema de que debemos de invertir más tiempo y recursos para desarrollar la misma aplicación.

Al ser una tecnología más reciente que la de Flutter, aún la comunidad y documentación en general es pequeña.

¿Cuál Elegir?

La elección entre Flutter y Kotlin Multiplatform dependerá de tus necesidades específicas, también depende de las habilidades que tenga tu equipo de trabajo, si ya tu equipo conoce como emplear Kotlin, puede que KMP pueda ser una buena opción, pero, si se encuentran más cercanos a Dart, seguramente Flutter será el mejor candidato.

Ambos lenguajes son excelentes, ambos lenguajes tienen sintaxis similares y se encuentran cercanos a Java/Kotlin y Switch, por lo tanto, emplear cualquier a de ellos, no debería de suponer mayor problema.

  • Flutter:
    • Ideal para MVP o proyectos con énfasis en velocidad de desarrollo.
    • Buen soporte de Google y una gran comunidad.
    • Requiere aprender Dart.
    • Si quieres escalar tu proyecto a otras plataformas como Web o Escritorio, seguramente Flutter será un gran candidato para tu proyecto.
  • Kotlin Multiplatform:
    • Buena opción si necesitas compartir lógica de negocios con proyectos Android existentes.
    • Ofrece un rendimiento cercano al nativo.
    • Requiere conocimientos de Kotlin.
    • KMP también permite desarrollar en otras plataformas como web o MacOS y al ser código específico, debes de considerar según el proyecto a implementar, cuál es más efectivo.

Veremos las diferencias claves entre Flutter vs React Native vs Kotlin Multiplatform para el desarrollo de aplicaciones móviles en iOS y Android, se analiza rendimiento, curva de aprendizaje, ecosistema y más.


Únete a la comunidad de desarrolladores que han decidido dejar de picar código y empezar a construir productos reales. Recibe mis mejores trucos de arquitectura cada semana:

Acepto recibir anuncios de interes sobre este Blog.