En este artículo nos vamos a centrar en las tecnologías híbridas, y entre las más conocidas destacan dos: React Native y Flutter. Y la gran pregunta es: ¿Cuál es mejor? La respuesta rápida es: Depende.
Primero habría que tener contexto sobre qué tecnologías se usan para el desarrollo de aplicaciones móviles. Hay dos maneras de desarrollar una aplicación: con tecnologías nativas o con tecnologías híbridas. La gran ventaja de éstas últimas, es que con una misma base de código se puede desarrollar para diferentes sistemas operativos, reduciendo así el tiempo de desarrollo.
Antes de empezar con la comparativa, vamos a poner un poco de contexto sobre los dos frameworks.
Introducción a React Native
React Native es un framework de código abierto creado por Facebook para desarrollar aplicaciones para Android, iOS, macOS, Android TV, Web y Windows.
El propósito del framework es sustituir los componentes HTML de React por unos componentes que nos ofrece React Native para, en lugar de ser ejecutados en un navegador, correr directamente sobre las plataformas móviles nativas. Esto quiere decir que realmente obtienes una aplicación real nativa.
Introducción a Flutter
Flutter es un SDK desarrollado por Google para crear aplicaciones móviles tanto para Android como para iOS. Realmente Flutter fue desarrollado como un software para uso interno dentro de la compañía pero al ver su potencial, decidieron lanzarlo como proyectos de código abierto en 2017. Además, con Flutter también es posible desarrollar aplicaciones Web y de escritorio, aunque estas funcionalidades están en fase beta y no es una opción muy recomendable.
Ahora que ya sabemos algo más sobre estas dos tecnologías vamos a analizarlas un poco más en detalle punto por punto y finalmente sacaremos unas conclusiones.
En estos últimos años, la comunidad de Flutter ha crecido mucho pero la realidad es que cuesta bastante encontrar desarrolladores experimentados en Flutter y Dart. React Native tiene la gran ventaja de que se desarrolla con JavaScript o TypeScript que es probablemente el lenguaje de programación más popular actualmente. Esto hace que sea mucho más sencillo contratar un desarrollador con experiencia en JavaScript o en otros frameworks de JavaScript y su curva de aprendizaje va a ser mínima por lo tanto el grupo de desarrolladores entre el que elegir al contratar es mucho mayor con React Native.
Trabajo en equipo y experiencia dentro de una empresa
Un punto muy importante a tener en cuenta al elegir con qué tecnología vamos a trabajar es el compartir código, conocimiento y desarrolladores, y esto es una gran ventaja de React Native frente a Flutter.
React Native está basado en el framework React, por lo que si la versión web está hecha en React, se va a reducir mucho el tiempo de desarrollo al crear la aplicación con React Native, ya que compartirá toda la lógica y solo habría que ocuparse de la parte visual. Compartir código entre las aplicaciones, además de reducir el código y los tiempos de desarrollo, también va a simplificar su mantenimiento a largo plazo.
Más allá de compartir código, también es una gran ventaja de React Native poder compartir conocimientos entre diferentes equipos. Si por ejemplo hay un equipo de backend con Node.js, desarrolladores iOS/Android y desarrolladores Web, pueden compartir conocimiento de JavaScript o incluso se podrían compartir desarrolladores entre diferentes proyectos con una curva de aprendizaje mínima.
Experiencia de desarrollo
Configurar el entorno de desarrollo de Flutter por lo general es más sencillo que React Native.
Flutter tiene herramientas muy potentes para debuggear el código e inspeccionar el árbol de plugins gracias a su CLI, aunque React Native CLI carece de ciertas funcionalidades frente a Flutter.
La experiencia de actualización con Flutter, muchas veces puede resultar mucho más sencilla que con React Native CLI.
Hay que tener en cuenta que con React Native tenemos Expo CLI, diseñado para mejorar enormemente la experiencia de desarrollo. La experiencia de actualización de Expo también es excelente y no tiene nada que envidiar en este sentido a Flutter.
La experiencia de desarrollo con Flutter es uno de sus puntos fuertes, pero React Native está dando una buena subida en este aspecto y Expo le da un gran impulso.
Lenguaje de programación
Flutter utiliza el lenguaje de programación Dart, un lenguaje orientado a objetos que ofrece una sintaxis muy limpia.
React Native utiliza JavaScript/TypeScript que es uno de los lenguajes más usados actualmente.
Gracias a su gran comunidad de desarrolladores, React Native tiene una gran cantidad de bibliotecas de terceros, esto es un gran pro de React Native frente a Flutter, pero hay que decir que la popularidad de Flutter está creciendo considerablemente en los últimos años y en un futuro estarán a la par en cuanto a bibliotecas de terceros.
Rendimiento
Este puede ser uno de los puntos más complicados de comparar en cualquier software, y especialmente con Flutter y React Native. Ambas tecnologías son lo suficientemente potentes en la mayoría de situaciones si los desarrolladores han optimizado correctamente la aplicación.
Realmente no hay un claro ganador para este apartado, el rendimiento final de la aplicación va a depender de lo que el desarrollador optimice la app y las buenas prácticas que use para mejorar su rendimiento.
Además, desde hace unos meses en React Native está disponible el mismo motor de renderizado que usa Flutter.
Interfaz de usuario
Flutter renderiza la interfaz de usuario usando Skia, de esta manera unifica su apariencia en todas las plataformas optimizando así su rendimiento.
React Native sin embargo usa UIKit en iOS, en Android usa su sitema de diseño y el DOM en la web. Esto quiere decir que se pueden crear aplicaciones de aspecto similar pero adaptadas a cada plataforma.
Este punto React Native es claramente superior ya que es más importante es tener una interfaz que agrade a los usuarios en cada plataforma que una experiencia unificada en todas las plataformas.
Integraciones con la plataforma nativa
Flutter tiene un modelo de integración con la plataforma nativa bastante bueno al que llaman `platform channels` que permite escribir código en Swift y Kotlin. Además la documentación de Flutter en este aspecto es muy buena.
En React Native hay una curva de aprendizaje mucho mayor para crear código específico en las diferentes plataformas.
Actualizaciones dinámicas
Esto no es algo que se use en todas las empresas o en todos los proyectos, pero React Native tiene la posibilidad de actualizar las aplicaciones de manera dinámica sin tener que enviar a App Store o Play Store y pasar por el proceso de aprobación. Como por ejemplo con Code Push. Esto es algo que no tiene Flutter y tampoco está en su roadmap a un futuro.
Empresas que lo usan
React Native fue creado por Facebook y muchas de sus aplicaciones más famosas están hechas completamente o parcialmente con React Native como Instagram o Messenger. Una empresa que también está invirtiendo mucho en React Native es Microsoft reescribiendo muchas de sus aplicaciones en React Native y creando un montón de herramientas y bibliotecas para ello. Quizás una de las más famosas es la aplicación principal de configuración de Windows, que está desarrollada parcialmente en React Native. Otras grandes empresas que ya usan React Native en su aplicación son Tesla, Coinbase, AirBnb, Uber Eats o Discord entre otras.
Flutter fué creada por Google y la aplicación de Google Ads está creada con esta tecnología. La primera gran empresa que anunció que iba a desarrollar sus aplicaciones con Flutter fué Alibaba, una de las empresas de comercio online más grande del mundo. Además de esta, tenemos Hamilton Musical o AppTree.
Por ahora, React Native tiene un apoyo mucho mayor por las grandes empresas, pero hay que tener en cuenta que tiene más madurez y una base más estable que Flutter, pero Google está trabajando en esto y veremos si cambia la tendencia en los próximos años.
Conclusiones
Realmente, a la conclusión que llegamos es que cada una tiene sus pros y sus contras, pero ninguna de las diferencias que hemos comentado en este artículos son tan grandes ni evidentes como para decir firmemente que una es mejor que otra.
Como ya hemos comentado, a la hora de contratar desarrolladores, que entendemos que puede ser un punto diferenciador, React Native puede ser mejor opción si ya hay desarrolladores web o backend con JavaScript/TypeScript. En el único caso que React Native puede ser realmente la mejor opción sería en el caso de tener que desarrollar la versión móvil de un web hecha con React, ya que se puede reutilizar toda la lógica de la web y se podría ahorrar en torno a un 30% el tiempo de desarrollo de la app.
Pero la respuesta correcta a la pregunta de cual es mejor sería: Depende.