{"id":2143,"date":"2020-02-27T19:40:56","date_gmt":"2020-02-27T18:40:56","guid":{"rendered":"https:\/\/strattonapps.com\/?p=2143"},"modified":"2020-02-29T10:14:36","modified_gmt":"2020-02-29T09:14:36","slug":"flutter-future-1","status":"publish","type":"post","link":"https:\/\/strattonapps.com\/es\/mobile-development\/flutter\/flutter-future-1\/","title":{"rendered":"Flutter, presente y futuro del desarrollo m\u00f3vil multiplataforma #1"},"content":{"rendered":"<p>Explicar por qu\u00e9 este marco innovador podr\u00eda ser el mejor <strong>soluci\u00f3n para desarrollo m\u00f3vil<\/strong> vamos a separar los motivos en dos art\u00edculos diferentes para profundizar en cada motivo sin confundir ni aburrir al lector. Esta es la primera parte, y al final tendr\u00e1s un enlace a la segunda parte de esta narraci\u00f3n.<\/p>\n\n\n\n<p>Si a\u00fan no lo ha hecho y especialmente si no sabe nada al respecto, le recomiendo encarecidamente leer <a href=\"https:\/\/strattonapps.com\/es\/mobile-development\/flutter\/flutter-essentials\/\" class=\"rank-math-link\">nuestro art\u00edculo sobre Flutter essentials<\/a>. Sin embargo, daremos una peque\u00f1a definici\u00f3n para entrar en contexto para quienes no quieran leerlo.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Sobre Flutter<\/h2>\n\n\n\n<p>Flutter es un <strong>SDK innovador<\/strong> para crear principalmente <strong>aplicaciones para Android e iOS<\/strong> (m\u00e1s plataformas actualmente en versi\u00f3n beta y alfa). Este marco permite a los desarrolladores crear aplicaciones m\u00f3viles nativas multiplataforma hermosas y de alto rendimiento solo codificando una vez, en Flutter.<\/p>\n\n\n\n<p>Y cuando una nueva tecnolog\u00eda sale al mercado de desarrollo, lo primero que hay que tener en cuenta es <strong>cuales son sus ventajas<\/strong>. Es decir, la primera pregunta que debe hacerse es por qu\u00e9 usarlo. En el campo del takeit para el desarrollo de aplicaciones multiplataforma, adem\u00e1s, ya existen muchas tecnolog\u00edas. Cordova, PhoneGap, el nuevo Ionic, etc.<\/p>\n\n\n\n<p>El atributo &quot;nativo&quot; mencionado anteriormente, en caso de que no lo hayas notado. Pero primero, explicaremos el problema al revisar c\u00f3mo funcionan todas las dem\u00e1s tecnolog\u00edas.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Relaci\u00f3n marco-dispositivo<\/h2>\n\n\n\n<p>El primer argumento ser\u00e1 el camino <strong>Flutter y los dispositivos m\u00f3viles interact\u00faan<\/strong>. Vamos a repasar c\u00f3mo el framework o el software interact\u00faa con el dispositivo en todas las tecnolog\u00edas para saber c\u00f3mo es este v\u00ednculo, c\u00f3mo funciona realmente.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Los SDK de la plataforma (Android y iOS)<\/h3>\n\n\n\n<p>Tanto Android, el sistema operativo de Google lanzado en 2009 como iOS, lanzado en 2008, funcionan de la misma manera. Est\u00e1n basados en diferentes lenguajes (Objective-C y Java) pero su funcionamiento es el mismo.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large is-resized\"><img decoding=\"async\" loading=\"lazy\" src=\"https:\/\/strattonapps.com\/wp-content\/uploads\/2020\/02\/native-behavior.png\" alt=\"Native platform behavior\" class=\"wp-image-2146\" width=\"915\" height=\"443\" srcset=\"https:\/\/strattonapps.com\/wp-content\/uploads\/2020\/02\/native-behavior.png 628w, https:\/\/strattonapps.com\/wp-content\/uploads\/2020\/02\/native-behavior-300x145.png 300w\" sizes=\"(max-width: 915px) 100vw, 915px\" \/><figcaption>Plataforma nativa<\/figcaption><\/figure>\n\n\n\n<p>Su aplicaci\u00f3n puede ordenar a la plataforma que haga dos cosas diferentes: <strong>crear widgets o acceder a servicios<\/strong> del dispositivo m\u00f3vil (c\u00e1mara, ubicaci\u00f3n, bater\u00eda, sensores, etc.). Esos widgets se representan en un lienzo de pantalla y algunos eventos se devuelven a los widgets. <\/p>\n\n\n\n<p>Aunque es una arquitectura simple, el problema con esto es el hecho de que tienes que crear <strong>aplicaciones separadas<\/strong> con dos c\u00f3digos diferentes porque tienen diferentes idiomas nativos y widgets.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">WebViews<\/h3>\n\n\n\n<p>Cuando Android e iOS crecieron y, por lo tanto, el desarrollo m\u00f3vil lo hizo, sus clases para <strong>administrar contenido web<\/strong> sin salir de la aplicaci\u00f3n se volvi\u00f3 cada vez m\u00e1s vers\u00e1til, y permiti\u00f3 la creaci\u00f3n de frameworks que aprovechan esa <strong>vistas web<\/strong> para mostrar contenido en ambas plataformas a trav\u00e9s de ellas. As\u00ed es como surgieron Phonegap y Apache Cordova.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large is-resized\"><img decoding=\"async\" loading=\"lazy\" src=\"https:\/\/strattonapps.com\/wp-content\/uploads\/2020\/02\/webview-behavior.png\" alt=\"WebView technologies behavior\" class=\"wp-image-2148\" width=\"928\" height=\"449\" srcset=\"https:\/\/strattonapps.com\/wp-content\/uploads\/2020\/02\/webview-behavior.png 628w, https:\/\/strattonapps.com\/wp-content\/uploads\/2020\/02\/webview-behavior-300x145.png 300w\" sizes=\"(max-width: 928px) 100vw, 928px\" \/><figcaption>Tecnolog\u00edas WebView<\/figcaption><\/figure>\n\n\n\n<p>Usando las clases WebView (Android) y UIWebView (iOS, ahora en desuso para WKWebView), renderizan c\u00f3digo HTML, CSS y JavaScript, y existe una comunicaci\u00f3n entre el JavaScript de la vista web y el c\u00f3digo nativo para acceder a los servicios. Sin embargo, dado que es dif\u00edcil para lenguajes como JavaScript comunicarse directamente con el c\u00f3digo m\u00f3vil nativo, <strong>implementan un &quot;puente&quot;<\/strong> que hace conexi\u00f3n entre el reino de JavaScript y el reino nativo.<\/p>\n\n\n\n<p>Al ver que los servicios de plataforma normalmente no se llamaban con tanta frecuencia, esto no caus\u00f3 demasiados problemas de rendimiento al principio. Pero cuando el mercado de aplicaciones creci\u00f3 cada vez m\u00e1s, esta tecnolog\u00eda se revel\u00f3 como <strong>bastante limitado<\/strong>, especialmente por el rendimiento (es por eso que el prop\u00f3sito de Flutter era hacer una aplicaci\u00f3n fluida para ambas plataformas renderizando a 120 FPS, <a href=\"https:\/\/strattonapps.com\/es\/mobile-development\/flutter\/flutter-essentials\/\" class=\"rank-math-link\">leer m\u00e1s aqu\u00ed<\/a>).<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Vistas reactivas<\/h3>\n\n\n\n<p>A medida que lleg\u00f3 la programaci\u00f3n reactiva, los marcos web reactivos como <a href=\"https:\/\/reactjs.org\" class=\"rank-math-link\" target=\"_blank\" rel=\"noopener\">ReactJS<\/a> (y otros) se han vuelto populares principalmente porque simplifican la creaci\u00f3n de vistas web. En 2015, la creaci\u00f3n de React Native trajo los muchos beneficios de <strong>vistas de estilo reactivo<\/strong> a aplicaciones m\u00f3viles y ahora es popular.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large is-resized\"><img decoding=\"async\" loading=\"lazy\" src=\"https:\/\/strattonapps.com\/wp-content\/uploads\/2020\/02\/react-native-behavior.png\" alt=\"React Native behavior\" class=\"wp-image-2149\" width=\"932\" height=\"451\" srcset=\"https:\/\/strattonapps.com\/wp-content\/uploads\/2020\/02\/react-native-behavior.png 628w, https:\/\/strattonapps.com\/wp-content\/uploads\/2020\/02\/react-native-behavior-300x145.png 300w\" sizes=\"(max-width: 932px) 100vw, 932px\" \/><figcaption>Reaccionar nativo<\/figcaption><\/figure>\n\n\n\n<p>En React Native, el \u00e1mbito de JavaScript accede a los widgets de la plataforma en el \u00e1mbito nativo, en lugar de utilizar WebView. Sin embargo, tiene que irse <strong>a trav\u00e9s del puente<\/strong> para ellos tambi\u00e9n, y ahora no solo para acceder a servicios nativos, sino tambi\u00e9n <strong>para renderizar<\/strong>. Y debido a que normalmente se accede a los widgets con bastante frecuencia (hasta 60 veces por segundo) especialmente durante animaciones, transiciones, etc., esto puede <a class=\"rank-math-link\" href=\"https:\/\/medium.com\/@talkol\/performance-limitations-of-react-native-and-how-to-overcome-them-947630d7f440\" target=\"_blank\" rel=\"noopener\">causar problemas de rendimiento<\/a> y generalmente son dif\u00edciles de resolver. La parte nativa es r\u00e1pida, la parte JS es r\u00e1pida, pero moverse de una a otra causa una <strong>cuello de botella de rendimiento<\/strong>y debe mantener el flujo de datos entre ellos al m\u00ednimo.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Aleteo<\/h3>\n\n\n\n<p>Flutter se ha inspirado en React Native y tambi\u00e9n utiliza vistas de estilo reactivo. Sin embargo, los creadores tuvieron una gran idea para <strong>evitar el puente de conexi\u00f3n<\/strong>. En lugar de usar JavaScript, usaron el lenguaje compilado llamado Dart, tambi\u00e9n desarrollado por Google. Dart se compila con anticipaci\u00f3n (AOT) directamente en c\u00f3digo nativo, y as\u00ed es como no solo solucionaron problemas de rendimiento, sino tambi\u00e9n <strong>tiempos de inicio de aplicaciones mejorados<\/strong>.<\/p>\n\n\n\n<p>Esto solo (vistas reactivas sin puente) ya deber\u00eda ser una raz\u00f3n para hablar de Flutter como una tecnolog\u00eda de desarrollo interesante e innovadora que vale la pena probar, pero es solo el aperitivo de la revoluci\u00f3n de Flutter. El plato principal es su implementaci\u00f3n de <strong>widgets<\/strong>. La importancia es tal que discutiremos el funcionamiento de flutter en la siguiente secci\u00f3n, la secci\u00f3n de Widgets.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Widgets de Flutter<\/h2>\n\n\n\n<p>Los widgets son uno de los elementos m\u00e1s importantes de una aplicaci\u00f3n. Ellos <strong>crear y modificar la vista<\/strong> y son el comportamiento principal y pueden hacer o deshacer una aplicaci\u00f3n. Los servicios son funciones complementarias que sirven a los widgets para completar una aplicaci\u00f3n y darle funcionalidad.<\/p>\n\n\n\n<p>(gif)<\/p>\n\n\n\n<p>Entre otros, deben ser<\/p>\n\n\n\n<ul><li><strong>Buen aspecto y sentimiento<\/strong>. Los widgets deben verse bien y ser flexibles y naturales. Tienen que comportarse y adaptarse en varios tama\u00f1os de pantalla.<\/li><li><strong>Rendimiento r\u00e1pido<\/strong>: para construir el \u00e1rbol de widgets, inflar los widgets (instanciando a sus hijos), colocarlos en la pantalla, renderizarlos y (especialmente) animarlos.<\/li><li><strong>Extensible y personalizable<\/strong>. Las aplicaciones modernas exigen personalidad y estilo, y los desarrolladores deben poder agregar nuevos widgets agradables, hacer otros a partir de los primeros y personalizar todos los widgets para obtener el dise\u00f1o y modelo de su marca.<\/li><\/ul>\n\n\n\n<p>Flutter, en lugar de utilizar Widgets OEM (widgets de la plataforma nativa) o DOM WebViews, ha desarrollado un <strong>nueva arquitectura<\/strong> con widgets que cumplan las tres reglas mencionadas anteriormente.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img decoding=\"async\" loading=\"lazy\" width=\"628\" height=\"304\" src=\"https:\/\/strattonapps.com\/wp-content\/uploads\/2020\/02\/Flutter-behavior.png\" alt=\"Flutter behavior\" class=\"wp-image-2150\" srcset=\"https:\/\/strattonapps.com\/wp-content\/uploads\/2020\/02\/Flutter-behavior.png 628w, https:\/\/strattonapps.com\/wp-content\/uploads\/2020\/02\/Flutter-behavior-300x145.png 300w\" sizes=\"(max-width: 628px) 100vw, 628px\" \/><figcaption>Aleteo<\/figcaption><\/figure>\n\n\n\n<p>Eso es porque este marco mueve el <strong>widgets y renderizador<\/strong> desde la plataforma nativa <strong>en la aplicaci\u00f3n<\/strong>, dejando en la plataforma solo un lienzo dentro del cual renderizar esos widgets en la pantalla del dispositivo, pero no los widgets en s\u00ed. Los servicios (como la c\u00e1mara) y los eventos (temporizadores, toques, etc.) tambi\u00e9n se acceden a trav\u00e9s de la plataforma nativa. Pero el problema, como se ve en las vistas de reacci\u00f3n, estaba en la representaci\u00f3n.<\/p>\n\n\n\n<p>Cambiar los widgets y el renderizador hace que el <strong>la aplicaci\u00f3n pesa un poco m\u00e1s<\/strong>. Poniendo n\u00fameros sobre la mesa, el tama\u00f1o m\u00ednimo de una aplicaci\u00f3n de Flutter es de aproximadamente 4,6 MB, que es comparable a las que se compilan con herramientas de desarrollo equivalentes. De hecho, flutter tambi\u00e9n se aprovecha de esto porque a medida que aumenta el volumen y la carga de la aplicaci\u00f3n, el tama\u00f1o no aumenta de manera muy notable. Depende de los desarrolladores decidir si <strong>vale la pena los beneficios de flutter<\/strong> o no.<\/p>\n\n\n\n<p>Por \u00faltimo, comenta que aunque todav\u00eda existe un v\u00ednculo entre Dart y el c\u00f3digo nativo para codificar y decodificar datos, esto es mucho <strong>m\u00e1s r\u00e1pido que el puente de JavaScript<\/strong>.<\/p>\n\n\n\n<p>Eso es todo amigos. Como has visto, en relaci\u00f3n al dispositivo, Flutter es muy progresista, es muy ventajoso en comparaci\u00f3n con otros. Este es el primer punto por el que Flutter podr\u00eda convertirse en el <strong>campe\u00f3n del desarrollo de front-end<\/strong>, especialmente para aplicaciones m\u00f3viles. El segundo son sus poderosos widgets. En el pr\u00f3ximo art\u00edculo, cubriremos el dise\u00f1o, el dise\u00f1o personalizado, la gesti\u00f3n de \u00e1rboles, la recarga en caliente, la compatibilidad y m\u00e1s. \u00a1Espero que les haya gustado!<\/p>","protected":false},"excerpt":{"rendered":"<p>Para explicar por qu\u00e9 este marco innovador podr\u00eda ser la mejor soluci\u00f3n para el desarrollo m\u00f3vil, vamos a separar los motivos en dos art\u00edculos diferentes para profundizar en cada motivo sin confundir ni aburrir al lector. Esta es la primera parte, y al final tendr\u00e1s un enlace a la segunda parte ... <a title=\"Flutter, presente y futuro del desarrollo m\u00f3vil multiplataforma #1\" class=\"read-more\" href=\"https:\/\/strattonapps.com\/es\/mobile-development\/flutter\/flutter-future-1\/\" aria-label=\"M\u00e1s en Flutter, presente y futuro del desarrollo m\u00f3vil multiplataforma #1\">Leer m\u00e1s<\/a><\/p>","protected":false},"author":3,"featured_media":2160,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[32,17],"tags":[37,40,38,26,39,41],"_links":{"self":[{"href":"https:\/\/strattonapps.com\/es\/wp-json\/wp\/v2\/posts\/2143"}],"collection":[{"href":"https:\/\/strattonapps.com\/es\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/strattonapps.com\/es\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/strattonapps.com\/es\/wp-json\/wp\/v2\/users\/3"}],"replies":[{"embeddable":true,"href":"https:\/\/strattonapps.com\/es\/wp-json\/wp\/v2\/comments?post=2143"}],"version-history":[{"count":13,"href":"https:\/\/strattonapps.com\/es\/wp-json\/wp\/v2\/posts\/2143\/revisions"}],"predecessor-version":[{"id":2165,"href":"https:\/\/strattonapps.com\/es\/wp-json\/wp\/v2\/posts\/2143\/revisions\/2165"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/strattonapps.com\/es\/wp-json\/wp\/v2\/media\/2160"}],"wp:attachment":[{"href":"https:\/\/strattonapps.com\/es\/wp-json\/wp\/v2\/media?parent=2143"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/strattonapps.com\/es\/wp-json\/wp\/v2\/categories?post=2143"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/strattonapps.com\/es\/wp-json\/wp\/v2\/tags?post=2143"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}