El mercado del desarrollo móvil está ganando rápidamente impulso en los últimos años. En 2019, se espera que cubra 2.500 millones de usuarios y más de 80.000 millones de dólares con la perspectiva de seguir creciendo. Poco a poco, se han ido formando tres nichos clave, que son el desarrollo para Android, iOS y las soluciones multiplataforma, que determinan el desarrollo posterior del mercado. Estas últimas surgieron como una forma de crear rápidamente aplicaciones para las dos plataformas dominantes, sacrificando la potencia del desarrollo nativo. Las soluciones más famosas en este ámbito fueron PhoneGap de Adobe, Xamarin de Microsoft, React Native de Facebook. En 2017, Google se unió al grupo presentando su framework Flutter en la conferencia anual Google I/O. En diciembre de 2018, se lanzó la versión estable de Flutter, que lo convirtió de un SDK experimental en una herramienta de desarrollo totalmente apta para el comercio.

Sin embargo, cada herramienta tiene sus propios puntos fuertes y débiles. Su comprensión es extremadamente necesaria para hacer la elección correcta y obtener la óptima relación coste-resultado.

Las ventajas de utilizar Flutter para crear aplicaciones móviles

1.Es gratuito y de código abierto

El SDK no requiere el coste de la compra de una licencia y ofrece toda una serie de oportunidades para añadir la funcionalidad que falta al repositorio del proyecto https://github.com/flutter/flutter.

2.Ahorre tiempo de desarrollo con un enfoque multiplataforma

Al igual que el resto de herramientas para el desarrollo híbrido y multiplataforma, Flutter permite desarrollar para ambos sistemas móviles a la vez, reduciendo el tiempo total de desarrollo y sincronizando la aparición de nuevas versiones de la aplicación para Android e iOS.

3.Biblioteca gráfica inherente

Flutter utiliza la biblioteca integrada Skia para el renderizado. Esto hace que sea más independiente de la plataforma. El SDK proporciona un rico conjunto de widgets, en particular, las colecciones Material y Cupertino para renderizar widgets de tipo nativo para Android e iOS. Combinando varios widgets, tendrá la oportunidad de crear una interfaz de usuario compleja. Gracias a su propia biblioteca, las aplicaciones de Flutter tienen el mismo aspecto en diferentes versiones de sistemas operativos. De este modo, sirve para resolver uno de los principales problemas del desarrollo móvil actual: la gran variabilidad de los dispositivos móviles.

En este ejemplo, creamos un botón de acción flotante con icono y texto.

Además de una interfaz de usuario predecible, también obtendrá una aplicación más productiva. Las aplicaciones híbridas (como PhoneGap o Ionic) utilizan WebView para renderizar los gráficos, lo que tiene un rendimiento terrible y difiere del aspecto nativo. React Native se basa en convertir los puentes de sus widgets en nativos. Esto aumenta la carga de los recursos del dispositivo y también puede causar problemas de renderizado. Skia garantiza el correcto comportamiento de la UI.

4.Recarga en caliente

Uno de los inconvenientes de los lenguajes compilados antes que los lenguajes de scripting es la pérdida de tiempo para construir un proyecto. Si las ediciones son frecuentes, puede suponer una parte importante del tiempo de trabajo. La función de recarga en caliente de Flutter le permite mostrar el efecto de sus ediciones en el código de forma inmediata.

5.Potente comunidad

Por supuesto, uno de los mayores puntos fuertes del SDK es su comunidad en rápido crecimiento. Gracias a los esfuerzos de Google y de los entusiastas, Flutter cuenta con una documentación bien estructurada y con ejemplos de la realización de las principales tareas del desarrollo móvil. Las principales plataformas para el intercambio de experiencias se presentan en el recurso https://flutter.dev/community.

6.Perspectivas de desarrollo de Fuchsia OS

Flutter es actualmente la única herramienta para crear aplicaciones para el sistema operativo Fuchsia OS de Google. Desde hace varios años, el nuevo sistema operativo ha despertado el interés de los desarrolladores y las preguntas sobre su finalidad. Los fans más acérrimos lo llaman el “asesino de Android”, que debería difuminar la línea entre el desarrollo móvil, el de escritorio y el de la web. En la propia Google, el nuevo sistema operativo se evalúa con más moderación: como un campo de pruebas para ensayar nuevas ideas y experimentos. No obstante, con el desarrollo posterior de Fuchsia, la experiencia de desarrollo con Flutter le permitirá dominar rápidamente un nuevo nicho en el mercado de desarrollo de software.

Al mismo tiempo, no se pueden ignorar los defectos de Flutter.

Los defectos de usar Flutter para crear aplicaciones móviles

1.Umbral de entrada

El lenguaje de desarrollo de Flutter es Dart, un lenguaje poco utilizado por los desarrolladores, que fue creado por Google como alternativa a JavaScript. Según el índice TIOBE de agosto de 2019, ocupa el puesto 46 de los más populares, muy por detrás de los más populares Java, Swift y JavaScript en el desarrollo móvil. Aprender un nuevo lenguaje lleva su tiempo. En términos de sintaxis, Dart se acerca a Java, pero también tiene varias diferencias. Por ejemplo, compare dos clases implementadas en estos lenguajes.

Java
Dardo

Con la similitud general de la sintaxis y la lógica de la construcción del código, existen diferencias: declaración de variables privadas, inicialización automática de campos, notación de flecha (=>) para declarar un miembro de la clase. Las diferencias son aún más notables cuando se trabaja con multihilo.

De gran dificultad es el enfoque fundamentalmente diferente de Flutter a la arquitectura de las aplicaciones móviles. En el desarrollo nativo, prevalece un enfoque imperativo: se crea una Vista, se añade al diseño padre y se controlan sus propiedades mediante métodos y atributos específicos. En cambio, se propone un enfoque declarativo basado en los widgets. Para construir la UI deseada, es necesario elegir una combinación de widgets con propiedades específicas. Los widgets pueden describir el tipo de componente (texto, imagen, barra de progreso, etc.), la posición en la pantalla, el comportamiento, etc. En total, Flutter ofrece 14 categorías de widgets que resuelven problemas concretos. Los más utilizados son Animación y movimiento (varias transiciones y constructores para animaciones), Activos, imágenes e icono, Async (constructores de Futuro y Vapor), Básico (componentes estándar de la aplicación, por ejemplo, AppBar, Fila, Columna, Texto), los ya mencionados Cupertino y Material, Estilo, Texto, etc. Con su ayuda, podrá implementar la mayor parte de las tareas a las que se enfrenta la aplicación móvil. Sin embargo, para construir una interfaz de usuario más o menos complicada, se necesita una sólida comprensión del enfoque declarativo y de las propiedades de los distintos widgets. La experiencia previa en el desarrollo nativo de Android e iOS es más bien una ayuda.

2.Conjunto limitado de herramientas y bibliotecas

Flutter es un SDK muy joven, que apareció en el mercado del desarrollo móvil hace 2 años. Además de la comodidad y la elegancia de la implementación de las tareas técnicas, una característica esencial de cualquier framework es la disponibilidad de soluciones ya hechas para funcionalidades específicas. Esto le permite ahorrar tiempo en el desarrollo y no tener que hacer ciclos cada vez que crea un selector de colores o una barra de progreso personalizada. El recurso https://pub.dev/flutter/ proporciona un número considerable de paquetes para el desarrollo móvil en Flutter. Sin embargo, es significativamente inferior en el número de soluciones disponibles en desarrollo nativo y React Native. Esto significa que para una tarea más o menos específica, tiene que escribir su propia solución.

La pequeña prevalencia del lenguaje Dart también afecta. Escribe el orden de magnitud de las bibliotecas más pequeñas para trabajar, por ejemplo, con números de teléfono, imágenes o flujos. Las posibilidades de escribir usted mismo la biblioteca adecuada aumentan drásticamente y las posibilidades de ahorrar tiempo de desarrollo son las contrarias.

3.Archivo de instalación más grande

Para independizarse de los widgets nativos, también hay que pagar. Flutter se ve obligado a añadir una máquina virtual Dart a cualquier aplicación, lo que aumenta el tamaño del archivo de instalación. Para la aplicación más sencilla HelloWorld, esto supone 4,7 Mb. A modo de comparación, una aplicación nativa similar de Android ocupa 540 Kb. En la búsqueda del ahorro de espacio, Flutter pierde irremediablemente frente al desarrollo nativo.

4.Débil soporte de las características de iOS

El origen Google de Flutter deja su huella en la calidad del soporte para el sistema operativo móvil. Si en Android la mayoría de las funciones del SDK funcionan correctamente, en iOS la situación es mucho más triste. Por ejemplo, al fotografiar en los dispositivos de Apple, la aplicación borra todos los datos EXIF. Por ello, la foto se muestra con una orientación errónea, sin ubicación, sin fecha, sin la gamma correcta. No se ha implementado prácticamente ninguna compatibilidad con las funciones de accesibilidad de iOS (VoiceOver, acceso guiado, subtítulos y descripciones de audio).

5.Falta de pulsaciones en caliente

Las soluciones multiplataforma React Native, Cordova e Ionic ofrecen un mecanismo para realizar cambios rápidos en la aplicación después del lanzamiento: las actualizaciones en caliente o hot push. Aunque la hoja de ruta de desarrollo de Flutter para 2019 tenía la intención de introducir esta característica, por el momento el trabajo se ha suspendido. Las razones son la incapacidad de garantizar la rápida ejecución de las actualizaciones en iOS, la posibilidad de que se introduzca código malicioso y los problemas con la entrega de paquetes. Las actualizaciones de software sólo son posibles de la manera tradicional: mediante el lanzamiento de nuevas versiones de Google Play o de la App Store.

6.Falta de apoyo a los gestores de contraseñas

Uno de los inconvenientes de utilizar widgets propios en lugar de nativos es la aparición de problemas con el uso de algunas funciones de Android e iOS. Actualmente, las aplicaciones de Flutter experimentan problemas con los campos de entrada de autocompletar. Esto es especialmente notorio si es necesario implementar la extracción de contraseñas desde gestores de contraseñas integrados o de terceros. Este problema se describe en detalle(https://github.com/flutter/flutter/issues/13015) pero aún no se ha resuelto.

Reflexiones finales

Flutter es un nuevo y muy prometedor SDK multiplataforma. Tiene en cuenta la experiencia positiva obtenida por soluciones anteriores, en particular React Native. Por supuesto, sus puntos fuertes son el alto rendimiento, la relativa independencia de los widgets nativos y el fuerte apoyo de Google y los entusiastas. Al mismo tiempo, no se puede decir que permita implementar todas las tareas de desarrollo móvil. La lista de temas dedicados a cuestiones no resueltas es muy sólida y suma más de 7 mil. El competidor más cercano a React Native es mucho más corto: unas 600 cuestiones. El corto periodo de existencia de Flutter también afecta. Por el número de librerías y ejemplos de resolución de problemas, está por detrás de otras soluciones multiplataforma, por no hablar del desarrollo nativo para Android e iOS.

¿Cuál es el nicho actual de Flutter en el mercado del desarrollo móvil? Puede aportar el mayor rendimiento como herramienta para la creación de prototipos de aplicaciones, si es necesario crear una demo en ambas plataformas móviles para mostrarla a los inversores. En el ámbito de la producción, es adecuado para crear las aplicaciones más sencillas que no tienen grandes requisitos funcionales. Si la clave de la aplicación es la velocidad de desarrollo y el abaratamiento y se está dispuesto a comprometer la UI / UX, entonces esta solución multiplataforma es bastante adecuada. Como muestra la experiencia, React Native reina ahora en este nicho de mercado, pero Flutter puede competir con él bastante bien. Si Flutter сould salvar su actual dinámica de desarrollo, resolver los problemas de soporte de características nativas y añadir la capacidad de desarrollar completamente aplicaciones de escritorio y web, es posible que se convierta en el № 1 SDK para el desarrollo multiplataforma