Kotlin Multiplatform y Flutter son dos de los frameworks de aplicaciones multi/multiplataforma más populares que están madurando rápidamente. Ambos te permiten reutilizar el código al desarrollar aplicaciones para Android e iOS. Sin embargo, estas plataformas son fundamentalmente diferentes y cumplen varios objetivos. Habiendo trabajado con ambos, proporcionaré mis pensamientos sobre sus respectivas fortalezas y debilidades, vamos con ello.
Antes de continuar con este Post, te invito a leer los siguientes artículos:
- Que es Kotlin y otros detalles
- Tipos de Variables en Kotlin
- Que Es Flutter y Otros Detalles
- 5 Consejos Para Tu Próximo Proyecto con Flutter
- Puedes leer más en la categoría Flutter y la categoría Kotlin
Asimismo te invito a escuchar el Podcast: “Las Buenas Prácticas Un Hábito Importante en la Programación” y “¿ Porqué Es Importante Saber Programar en la Ciberseguridad ?” (Anchor Podcast)”:
Spotify: | Sound Cloud: | Apple Podcasts | Anchor Podcasts |
Bien ahora continuemos con el Post: Kotlin Multiplataforma vs Flutter.
Móvil multiplataforma de Kotlin (KMM)
Kotlin es una excelente opción para crear aplicaciones móviles. Su concisión, simplicidad y expresividad hacen que sea sencillo desarrollar código correcto y comprensible. Si está comenzando un nuevo proyecto nativo de Android, Kotlin es el lenguaje recomendado. Como resultado, si debe apuntar a dispositivos Android, es casi seguro que terminará con la lógica comercial de Android integrada en Kotlin. Imagine poder usar el código de lógica empresarial de su Android como un marco de iOS en su aplicación de iOS, casi sin modificar. KMM es actualmente la mejor herramienta para esto, y es utilizado por organizaciones como VMware, Philips y Netflix.
KMM tiene una carpeta compartida que se reutiliza completamente entre plataformas. La mayor parte de la lógica empresarial será independiente de la plataforma. Pero, cuando necesites escribir código que dependa de bibliotecas nativas/del sistema, puedes contar con las palabras clave expect/real de KMM.
Un conjunto de fuentes común proporciona una declaración anticipada en este mecanismo, y los conjuntos de fuentes de la plataforma deben proporcionar la declaración real que corresponde a la declaración esperada. Esto es cierto para la gran mayoría de las declaraciones de Kotlin, incluidas funciones, clases, interfaces, enumeraciones, propiedades y anotaciones.
¿ Curioso por cómo funciona ? Mira este código:
1 2 3 4 5 6 7 8 9 10 11 12 |
// Compartido (Common) expect fun randomUUID(): String // Android import java.util.* actual fun randomUUID() = UUID.randomUUID().toString() // iOS import platform.Foundation.NSUUID actual fun randomUUID(): String = NSUUID().UUIDString() |
Muy sencillo, ¿verdad? De esta manera, la función randomUUID() se puede utilizar a partir de código reutilizado (código común), proporcionando la implementación correcta para cada plataforma durante la compilación. Luego, se proporciona un código común para cada plataforma como un módulo de Android o un marco de iOS.
Flutter
Flutter es un marco multiplataforma para apuntar a iOS y Android con una sola base de código. Google lo llama un “conjunto de herramientas de interfaz de usuario para crear hermosas aplicaciones compiladas de forma nativa para dispositivos móviles, web y de escritorio”. Uno de los superpoderes de Flutter es que puedes diseñar casi cualquier interacción o animación y hacer que funcione de la misma manera en Android e iOS. No es necesario realizar ajustes especiales ni recrear la interfaz de usuario diseñada utilizando plataformas nativas. Para aquellos que buscan innovar en el espacio de la interfaz de usuario o no necesitan hacer un uso intensivo de las funciones nativas, Flutter es una buena opción.
Para escribir aplicaciones de Flutter, debe programar en Dart. Dart es un lenguaje de programación similar a C/Javascript/Java, que puede resultarle muy familiar si ha tenido contacto previo con algunos de estos lenguajes. Las nuevas funciones, como la seguridad contra el sonido nulo, hacen que Dart se acerque aún más a Kotlin y Swift. Pero no se equivoque: para tener funciones de lenguaje moderno como clases selladas, clases en línea, es posible que necesite usar generadores de código (eche un vistazo a Freezed de Remi Rousselet como ejemplo de código generado en Flutter).
Flutter es muy fácil de usar y tiene una recarga en caliente realmente rápida. Es bueno ver la interfaz de usuario de tu móvil renderizada casi en tiempo real en un emulador/simulador mientras codificas. No es la mejor opción si depende en gran medida de funciones nativas que no tienen una biblioteca existente, porque de lo contrario, es posible que deba dedicar mucho tiempo a crear código de plomería para el canal de la plataforma de Flutter. Otra debilidad es que los componentes nativos de la interfaz de usuario se recrean en el motor de Flutter. Esto significa que si se lanza una nueva versión del sistema operativo con nuevos componentes de interfaz de usuario, tendrá que esperar hasta que Flutter se ponga al día para usar los recursos más nuevos.
¿Cuál debería elegir?
KMM puede ser una buena opción si:
- Ya tienes un código nativo específico existente para reutilizarlo.
- Te preocupa tener los componentes nativos más actualizados y desea tener una apariencia 100 % nativa en cada nueva versión del sistema operativo.
- Deseas compartir código de forma incremental entre plataformas en una base de código existente.
- No necesitas publicar una versión de escritorio o web de su aplicación.
- No deseas depender de la implementación del motor Flutter en cada plataforma.
- Tu proyecto no se lanzará muy pronto, o no le importa que KMM esté en estado alfa en este momento.
- Tu aplicación está fuertemente ligada a subprocesos múltiples o tiene necesidades de procesamiento en segundo plano.
Nota: Hasta la fecha de este Post, KMM se encuentra actualmente en alfa y las API pueden cambiar hasta que se estabilice. Se está reemplazando la administración de memoria nativa de Kotlin (importante para iOS). Deberá estudiar cómo maneja la administración de memoria, la concurrencia y la inmutabilidad para implementar correctamente el código multiplataforma por ahora. Verifica: https://kotlinlang.org/docs/native-concurrency.html#global-variables-and-singletons
Flutter puede ser una buena opción si:
- Estás en un equipo pequeño y no tiene recursos para dos bases de código de IU nativas.
- Tu aplicación depende principalmente de llamadas simples a la API y la base de datos, un caso de uso común en las aplicaciones móviles. En este escenario, puede evitar escribir el código del canal de plataforma de Flutter, ya que no necesitará interactuar con el código nativo.
- Tu aplicación tiene una interfaz de usuario personalizada o está innovando en el espacio de la interfaz de usuario.
- Tu objetivo es Web y Desktop además de Mobile y quiere tener una solución que funcione para estas plataformas ahora mismo.
Conclusión
En este Post hemos visto la diferencia entre Kotlin Multiplataforma y Flutter. Recuerda usar la tecnología adecuada según el proyecto y los objetivos del mismo. Como buen desarrollador, no descartes ninguna de las alternativas, ya que siempre hay diferentes necesidades y las herramientas están para cubrirlas.
Nota(s)
- No olvides que debemos usar la Tecnología para hacer cosas Buenas por el Mundo.
Síguenos en las Redes Sociales para que no te pierdas nuestros próximos contenidos.