{"id":335,"date":"2026-03-18T14:49:15","date_gmt":"2026-03-18T13:49:15","guid":{"rendered":"http:\/\/localhost\/waynasoft\/?p=335"},"modified":"2026-03-25T18:03:41","modified_gmt":"2026-03-25T17:03:41","slug":"curso-de-desarrollo-de-aplicaciones-moviles","status":"publish","type":"post","link":"https:\/\/waynasoft.com.bo\/waynasoft\/2026\/03\/18\/curso-de-desarrollo-de-aplicaciones-moviles\/","title":{"rendered":"Curso de Desarrollo de Aplicaciones M\u00f3viles"},"content":{"rendered":"\t\t<div data-elementor-type=\"wp-post\" data-elementor-id=\"335\" class=\"elementor elementor-335\" data-elementor-post-type=\"post\">\n\t\t\t\t<div class=\"elementor-element elementor-element-271579f e-grid e-con-boxed e-con e-parent\" data-id=\"271579f\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-e6ab7d3 elementor-widget elementor-widget-text-editor\" data-id=\"e6ab7d3\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t\t\t\t\t\t<h5><b>Presentaci\u00f3n del Curso\u00a0<\/b><\/h5><p><span style=\"font-size: 1rem;\">Curso pr\u00e1ctico de Flutter y Dart enfocado en aprendizaje directo mediante desarrollo en vivo de un proyecto real. Los estudiantes siguen el c\u00f3digo en sus equipos con teor\u00eda m\u00ednima. Se crea una app de gesti\u00f3n o inventario con autenticaci\u00f3n, CRUD y Firebase Firestore. Al finalizar, cada participante contar\u00e1 con una aplicaci\u00f3n funcional instalada<\/span><span style=\"font-size: 1rem;\">.<\/span><\/p><h5><b>Contenido:<\/b><\/h5><p>1. Entorno y primeros pasos<br \/>2. Widgets y Layout<br \/>3. Listas y Datos Locales<br \/>4. Navegaci\u00f3n y Formularios<br \/>5. Asincr\u00f3no y Firebase Setup<br \/>6. Autenticacion con Firebase Auth<br \/>7. CREATE y READ en Firestore<br \/>8. UPDATE y DELETE<br \/>9. UX y Carga de Datos<br \/>10. Im\u00e1genes con Firebase Storage<br \/>11. Limpieza de C\u00f3digo y APK<br \/>12. Presentaci\u00f3n y Cierre del Curso<\/p><p style=\"padding-left: 40px;\">\u00a0<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-8a857d5 elementor-widget elementor-widget-text-editor\" data-id=\"8a857d5\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t\t\t\t\t\t<p><img fetchpriority=\"high\" decoding=\"async\" class=\"alignnone size-full wp-image-339\" src=\"https:\/\/waynasoft.com.bo\/waynasoft\/wp-content\/uploads\/2026\/03\/Gemini_Generated_Image_fb0yucfb0yucfb0y-1.png\" alt=\"\" width=\"1024\" height=\"716\" \/><\/p><div style=\"padding-left: 50px; margin-top: -20px;\"><b>Duraci\u00f3n Total:<\/b> 3 meses<br \/><b>Clases por semana:<\/b> 2 sesiones<br \/><b>Duraci\u00f3n por clase:<\/b> 2 Horas<br \/><b>Total de sesiones: <\/b>24 sesiones<br \/><b>Total de horas: 48<\/b> horas<br \/><b>Formato:<\/b> Teor\u00eda breve + Proyecto en vivo<\/div>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-19fc6ed e-flex e-con-boxed e-con e-parent\" data-id=\"19fc6ed\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-0ccf76e elementor-widget elementor-widget-text-editor\" data-id=\"0ccf76e\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t\t\t\t\t\t<div class=\"documento\"><p><!-- T\u00edtulo principal y primera tabla de organizaci\u00f3n --><\/p><h1><img decoding=\"async\" class=\"emoji\" role=\"img\" draggable=\"false\" src=\"https:\/\/s.w.org\/images\/core\/emoji\/17.0.2\/svg\/1f4f1.svg\" alt=\"\ud83d\udcf1\" \/>Como est\u00e1 organizado el tiempo en cada clase:<\/h1><p><!-- TABLA: Actividad \/ Tiempo \/ Que ocurre (sin<\/p>\n<table>) --><\/p><div class=\"grid-tabla\"><div class=\"tabla-fila encabezado\"><div><strong>Actividad<\/strong><\/div><div><strong>Tiempo<\/strong><\/div><div><strong>Que ocurre<\/strong><\/div><\/div><div class=\"tabla-fila\"><div><strong>Repaso r\u00e1pido<\/strong><\/div><div>10 min<\/div><div>Se retoma el tema anterior. El docente pregunta, resuelve dudas pendientes.<\/div><\/div><div class=\"tabla-fila\"><div><strong>Teor\u00eda necesaria<\/strong><\/div><div>20-25 min<\/div><div>Solo lo que se necesita saber para entender el C\u00f3digo de la sesi\u00f3n. Sin diapositivas largas.<\/div><\/div><div class=\"tabla-fila\"><div><strong>Desarrollo en vivo<\/strong><\/div><div>70-75 min<\/div><div>El docente codifica en pantalla. Los alumnos replican en sus equipos. Se avanza el proyecto.<\/div><\/div><div class=\"tabla-fila\"><div><strong>Cierre<\/strong><\/div><div>10 min<\/div><div>Resumen de lo que se hizo. Se adelanta lo que viene en la siguiente sesi\u00f3n.<\/div><\/div><\/div><p><!-- Notas importantes --><\/p><div class=\"nota-importante\"><span style=\"color: #0f1115; font-family: Menlo, Monaco, Consolas, 'Cascadia Mono', 'Ubuntu Mono', 'DejaVu Sans Mono', 'Liberation Mono', 'JetBrains Mono', 'Fira Code', Cousine, 'Roboto Mono', 'Courier New', Courier, sans-serif, system-ui; font-size: 13px; white-space-collapse: preserve; background-color: #ffffff;\"><img decoding=\"async\" class=\"emoji\" role=\"img\" draggable=\"false\" src=\"https:\/\/s.w.org\/images\/core\/emoji\/17.0.2\/svg\/1f4cc.svg\" alt=\"\ud83d\udccc\" \/> <\/span><strong>Notas importantes:<\/strong><br \/>&#8211; El proyecto se construye de forma incremental: cada sesi\u00f3n agrega algo visible y funcional.<br \/>&#8211; Si el grupo se atrasa, es mejor consolidar lo actual que avanzar temas nuevos sin base.<br \/>&#8211; Tener snippets listos para Firebase setup y StreamBuilder ahorra tiempo de escritura en vivo.<br \/>&#8211; Compartir el repositorio al final de cada clase para que los alumnos tengan el C\u00f3digo actualizado.<br \/>&#8211; Las sesiones 1 y 9 son cr\u00edticas: instalaci\u00f3n y conexi\u00f3n Firebase. Reservar tiempo extra para problemas t\u00e9cnicos.<\/div><p><!-- MES 1 --><\/p><div class=\"encabezado-mes\"><img decoding=\"async\" class=\"emoji\" role=\"img\" draggable=\"false\" src=\"https:\/\/s.w.org\/images\/core\/emoji\/17.0.2\/svg\/1f4d8.svg\" alt=\"\ud83d\udcd8\" \/>\u00a0MES 1 \u2014 Bases de Dart y Flutter<\/div><p><em>Objetivo del mes: que el alumno entienda como funciona Dart, conozca los widgets fundamentales de Flutter y pueda construir pantallas simples con navegaci\u00f3n. Toda la teor\u00eda se da de forma aplicada: se explica el concepto y de inmediato se usa en c\u00f3digo.<\/em><\/p><h5>\ud83d\udcc6 SEMANA 1 \u2014 Entorno y primeros pasos<\/h5><div class=\"card-grid\"><div class=\"ficha-fila header-ficha\"><div><strong>Sem.<\/strong><\/div><div><strong>Ses.<\/strong><\/div><div><strong>Tema<\/strong><\/div><div><strong>Descripci\u00f3n<\/strong><\/div><div><strong>Lo que ve el alumno<\/strong><\/div><\/div><div class=\"ficha-fila\"><div>1<\/div><div>1<\/div><div>Instalacion y primer proyecto<\/div><div>Se instala Flutter SDK, VS Code y el emulador. Se crea el primer proyecto con flutter create y se analiza la estructura de carpetas. Se explica brevemente que es Flutter y por que Dart.<\/div><div>App default corriendo en el emulador. Hot reload en acci\u00f3n.<\/div><\/div><div class=\"ficha-fila\"><div>1<\/div><div>2<\/div><div>Dart esencial: variables, tipos y funciones<\/div><div>Solo lo necesario de Dart para escribir Flutter: var, String, int, bool, null safety basico con ? y !. Funciones con parametros nombrados. Se practica directo en el archivo main.dart.<\/div><div>Funciones propias llamadas desde el boton de la app default.<\/div><\/div><\/div><h5>\ud83d\udcc6 SEMANA 2 \u2014 Widgets y Layout<\/h5><div class=\"card-grid\"><div class=\"ficha-fila header-ficha\"><div><strong>Sem.<\/strong><\/div><div><strong>Ses.<\/strong><\/div><div><strong>Tema<\/strong><\/div><div><strong>Descripci\u00f3n<\/strong><\/div><div><strong>Lo que ve el alumno<\/strong><\/div><\/div><div class=\"ficha-fila\"><div>2<\/div><div>3<\/div><div>Widgets fundamentales<\/div><div>Se explica el concepto de widget y el arbol de widgets. Se usan: Text, Container, Icon, Image.asset, ElevatedButton. Se habla de StatelessWidget como punto de partida.<\/div><div>Pantalla de bienvenida construida desde cero con varios widgets.<\/div><\/div><div class=\"ficha-fila\"><div>2<\/div><div>4<\/div><div>Layout: Column, Row y Scaffold<\/div><div>Como organizar elementos en pantalla con Column y Row. MainAxisAlignment y CrossAxisAlignment. Padding, SizedBox y Expanded para espaciado. AppBar y FloatingActionButton.<\/div><div>Tarjeta de perfil de usuario con foto, nombre y boton.<\/div><\/div><\/div><h5>\ud83d\udcc6 SEMANA 3 \u2014 Listas y Datos Locales<\/h5><div class=\"card-grid\"><div class=\"ficha-fila header-ficha\"><div><strong>Sem.<\/strong><\/div><div><strong>Ses.<\/strong><\/div><div><strong>Tema<\/strong><\/div><div><strong>Descripci\u00f3n<\/strong><\/div><div><strong>Lo que ve el alumno<\/strong><\/div><\/div><div class=\"ficha-fila\"><div>3<\/div><div>5<\/div><div>Listas y ListView<\/div><div>Listas en Dart: List&lt;T&gt;, .map(), .where(). ListView.builder para mostrar colecciones. Se crea un modelo simple en Dart (clase con propiedades). Primer vistazo a StatefulWidget.<\/div><div>Lista de 10 items construida desde una lista Dart local.<\/div><\/div><div class=\"ficha-fila\"><div>3<\/div><div>6<\/div><div>StatefulWidget y setState<\/div><div>Diferencia entre Stateless y Stateful. El ciclo de vida b\u00e1sico. setState para actualizar la UI. Se agrega l\u00f3gica de eliminar y marcar items en la lista.<\/div><div>Lista interactiva: se pueden tachar y eliminar items.<\/div><\/div><\/div><h5>\ud83d\udcc6 SEMANA 4 \u2014 Navegaci\u00f3n y Formularios<\/h5><div class=\"card-grid\"><div class=\"ficha-fila header-ficha\"><div><strong>Sem.<\/strong><\/div><div><strong>Ses.<\/strong><\/div><div><strong>Tema<\/strong><\/div><div><strong>Descripci\u00f3n<\/strong><\/div><div><strong>Lo que ve el alumno<\/strong><\/div><\/div><div class=\"ficha-fila\"><div>4<\/div><div>7<\/div><div>Navegaci\u00f3n entre pantallas<\/div><div>Navigator.push y Navigator.pop. Pasar datos entre pantallas con argumentos. Crear rutas nombradas en MaterialApp. Se agrega una pantalla de detalle al proyecto.<\/div><div>App con pantalla principal y pantalla de detalle funcional.<\/div><\/div><div class=\"ficha-fila\"><div>4<\/div><div>8<\/div><div>Formularios y validaci\u00f3n b\u00e1sica<\/div><div>TextFormField, Form y GlobalKey. Validaci\u00f3n de campos vacios. onSaved y onChanged. Este formulario ser\u00e1 el que usaremos para crear items en Firebase mas adelante.<\/div><div>Formulario de crear item con validaci\u00f3n. Datos se muestran en consola.<\/div><\/div><\/div><p><!-- MES 2 --><\/p><div class=\"encabezado-mes\">MES 2 \u2014 Async, Estado y Conexi\u00f3n a Firebase<\/div><p><em>Objetivo del mes: conectar la app a Firebase, implementar autenticaci\u00f3n y comenzar el CRUD real. Se introduce la programaci\u00f3n as\u00edncrona solo cuando es necesaria para Firebase. El proyecto toma forma concreta.<\/em><\/p><h5>\ud83d\udcc6 SEMANA 5 \u2014 Asincrono y Firebase Setup<\/h5><div class=\"card-grid\"><div class=\"ficha-fila header-ficha\"><div><strong>Sem.<\/strong><\/div><div><strong>Ses.<\/strong><\/div><div><strong>Tema<\/strong><\/div><div><strong>Descripci\u00f3n<\/strong><\/div><div><strong>Lo que ve el alumno<\/strong><\/div><\/div><div class=\"ficha-fila\"><div>5<\/div><div>9<\/div><div>async \/ await y Future<\/div><div>Por que existe el c\u00f3digo as\u00edncrono. Future&lt;T&gt; explicado con un ejemplo simple. async y await de forma practica. try\/catch para manejar errores. Solo lo necesario para usar Firebase.<\/div><div>Funci\u00f3n as\u00edncrona que simula carga de datos con Future.delayed.<\/div><\/div><div class=\"ficha-fila\"><div>5<\/div><div>10<\/div><div>Conectar Firebase al proyecto<\/div><div>Crear app en Firebase Console. Instalar firebase_core y cloud_firestore. Agregar google-services.json. Inicializar Firebase en main.dart. Verificar conexi\u00f3n escribiendo un documento de prueba.<\/div><div>Primer documento escrito en Firestore desde la app en vivo.<\/div><\/div><\/div><h5>\ud83d\udcc6 SEMANA 6 \u2014 Autenticaci\u00f3n con Firebase Auth<\/h5><div class=\"card-grid\"><div class=\"ficha-fila header-ficha\"><div><strong>Sem.<\/strong><\/div><div><strong>Ses.<\/strong><\/div><div><strong>Tema<\/strong><\/div><div><strong>Descripci\u00f3n<\/strong><\/div><div><strong>Lo que ve el alumno<\/strong><\/div><\/div><div class=\"ficha-fila\"><div>6<\/div><div>11<\/div><div>Login y Registro con email<\/div><div>Instalar firebase_auth. Pantalla de Login y Registro con los formularios del mes anterior. signInWithEmailAndPassword y createUserWithEmailAndPassword. Manejo del error de credenciales.<\/div><div>Login y registro funcionando contra Firebase Auth real.<\/div><\/div><div class=\"ficha-fila\"><div>6<\/div><div>12<\/div><div>Persistencia de sesi\u00f3n y Logout<\/div><div>authStateChanges como Stream para saber si hay sesion activa. Redirigir al usuario seg\u00fan su estado: si esta logueado va al Home, si no va al Login. signOut.<\/div><div>La app recuerda la sesi\u00f3n aunque se cierre. Logout funcional.<\/div><\/div><\/div><h5>\ud83d\udcc6 SEMANA 7 \u2014 CREATE y READ en Firestore<\/h5><div class=\"card-grid\"><div class=\"ficha-fila header-ficha\"><div><strong>Sem.<\/strong><\/div><div><strong>Ses.<\/strong><\/div><div><strong>Tema<\/strong><\/div><div><strong>Descripci\u00f3n<\/strong><\/div><div><strong>Lo que ve el alumno<\/strong><\/div><\/div><div class=\"ficha-fila\"><div>7<\/div><div>13<\/div><div>CREATE: guardar datos en Firestore<\/div><div>collection().add() para crear documentos. Guardar el formulario de creaci\u00f3n en Firestore. Agregar el uid del usuario al documento. Mostrar SnackBar de exito o error.<\/div><div>El formulario ya guarda datos reales en Firestore.<\/div><\/div><div class=\"ficha-fila\"><div>7<\/div><div>14<\/div><div>READ: leer datos en tiempo real<\/div><div>StreamBuilder conectado a collection().snapshots(). Mapear DocumentSnapshot al modelo Dart. Mostrar los datos del usuario autenticado con where(&#8216;uid&#8217;). La lista se actualiza sola.<\/div><div>La lista principal muestra datos de Firestore en tiempo real.<\/div><\/div><\/div><h5>\ud83d\udcc6 SEMANA 8 \u2014 UPDATE y DELETE<\/h5><div class=\"card-grid\"><div class=\"ficha-fila header-ficha\"><div><strong>Sem.<\/strong><\/div><div><strong>Ses.<\/strong><\/div><div><strong>Tema<\/strong><\/div><div><strong>Descripci\u00f3n<\/strong><\/div><div><strong>Lo que ve el alumno<\/strong><\/div><\/div><div class=\"ficha-fila\"><div>8<\/div><div>15<\/div><div>UPDATE: editar documentos<\/div><div>Pantalla de edici\u00f3n que recibe el documento existente y lo pre-llena en el formulario. doc(id).update() para guardar cambios. Patron de navegacion: lista \u2192 edici\u00f3n \u2192 regreso con datos.<\/div><div>Edici\u00f3n de un item existente guardada en Firestore.<\/div><\/div><div class=\"ficha-fila\"><div>8<\/div><div>16<\/div><div>DELETE: eliminar con confirmaci\u00f3n<\/div><div>AlertDialog de confirmaci\u00f3n antes de borrar. doc(id).delete(). Widget Dismissible para swipe-to-delete. CRUD completo funcionando: Crear, Leer, Editar y Eliminar.<\/div><div>CRUD 100% funcional sobre Firestore. App ya es usable.<\/div><\/div><\/div><p><!-- MES 3 --><\/p><div class=\"encabezado-mes\">MES 3 \u2014 Pulido, im\u00e1genes y Entrega Final<\/div><p><em>Objetivo del mes: mejorar la experiencia de usuario, agregar subida de im\u00e1genes, limpiar el c\u00f3digo y dejar la app lista para mostrarse. Las ultimas dos sesiones son de presentaci\u00f3n y cierre del curso.<\/em><\/p><h5>\ud83d\udcc6 SEMANA 9 \u2014 UX y Carga de Datos<\/h5><div class=\"card-grid\"><div class=\"ficha-fila header-ficha\"><div><strong>Sem.<\/strong><\/div><div><strong>Ses.<\/strong><\/div><div><strong>Tema<\/strong><\/div><div><strong>Descripci\u00f3n<\/strong><\/div><div><strong>Lo que ve el alumno<\/strong><\/div><\/div><div class=\"ficha-fila\"><div>9<\/div><div>17<\/div><div>Loading states y manejo de errores<\/div><div>CircularProgressIndicator mientras carga Firestore. Pantalla de empty state cuando no hay datos. Mensajes de error amigables con SnackBar. La app ya no queda en blanco ni congela.<\/div><div>App con estados de carga, vac\u00edo y error visibles.<\/div><\/div><div class=\"ficha-fila\"><div>9<\/div><div>18<\/div><div>Busqueda y filtros simples<\/div><div>SearchBar que filtra la lista en memoria con .where(). Filtro por estado o categor\u00eda usando chips. No se necesitan \u00edndices compuestos para este nivel.<\/div><div>Barra de b\u00fasqueda funcionando sobre la lista de items.<\/div><\/div><\/div><h5>\ud83d\udcc6 SEMANA 10 \u2014 Im\u00e1genes con Firebase Storage<\/h5><div class=\"card-grid\"><div class=\"ficha-fila header-ficha\"><div><strong>Sem.<\/strong><\/div><div><strong>Ses.<\/strong><\/div><div><strong>Tema<\/strong><\/div><div><strong>Descripci\u00f3n<\/strong><\/div><div><strong>Lo que ve el alumno<\/strong><\/div><\/div><div class=\"ficha-fila\"><div>10<\/div><div>19<\/div><div>Seleccionar y subir im\u00e1genes<\/div><div>Instalar image_picker y firebase_storage. Seleccionar imagen de la galer\u00eda. Subir a Storage y obtener la URL de descarga. Guardar la URL en el documento de Firestore.<\/div><div>El formulario permite adjuntar una foto al item.<\/div><\/div><div class=\"ficha-fila\"><div>10<\/div><div>20<\/div><div>Mostrar im\u00e1genes y pulido visual<\/div><div>Mostrar imagen desde URL con Image.network y placeholder de carga. Ajustar tama\u00f1os, bordes y sombras. Revisar que la lista y el detalle se vean consistentes.<\/div><div>App con im\u00e1genes cargando correctamente en la lista y el detalle.<\/div><\/div><\/div><h5>\ud83d\udcc6 SEMANA 11 \u2014 Limpieza de C\u00f3digo y APK<\/h5><div class=\"card-grid\"><div class=\"ficha-fila header-ficha\"><div><strong>Sem.<\/strong><\/div><div><strong>Ses.<\/strong><\/div><div><strong>Tema<\/strong><\/div><div><strong>Descripci\u00f3n<\/strong><\/div><div><strong>Lo que ve el alumno<\/strong><\/div><\/div><div class=\"ficha-fila\"><div>11<\/div><div>21<\/div><div>Refactor y organizaci\u00f3n del proyecto<\/div><div>Separar la l\u00f3gica de Firebase en clases de servicio (AuthService, ItemService). Crear un archivo de constantes para colores y rutas. El c\u00f3digo queda mas legible y f\u00e1cil de mantener.<\/div><div>Proyecto reorganizado en carpetas: screens, services, models.<\/div><\/div><div class=\"ficha-fila\"><div>11<\/div><div>22<\/div><div>Icono, splash screen y generaci\u00f3n del APK<\/div><div>Cambiar el icono de la app con flutter_launcher_icons. Configurar el splash screen. Generar el APK con flutter build apk &#8211;release. Instalar en el dispositivo f\u00edsico.<\/div><div>APK instalado en el tel\u00e9fono del alumno. App funcionando offline en el dispositivo.<\/div><\/div><\/div><h5>\ud83d\udcc6 SEMANA 12 \u2014 Presentaci\u00f3n y Cierre del Curso<\/h5><div class=\"card-grid\"><div class=\"ficha-fila header-ficha\"><div><strong>Sem.<\/strong><\/div><div><strong>Ses.<\/strong><\/div><div><strong>Tema<\/strong><\/div><div><strong>Descripci\u00f3n<\/strong><\/div><div><strong>Lo que ve el alumno<\/strong><\/div><\/div><div class=\"ficha-fila\"><div>12<\/div><div>23<\/div><div>Sesi\u00f3n de repaso y ajustes finales<\/div><div>Cada alumno prueba su app e identifica lo que falta o esta roto. El docente recorre los proyectos y ayuda a corregir los \u00faltimos detalles. Reglas de seguridad b\u00e1sicas en Firestore.<\/div><div>App de cada alumno lista para presentar.<\/div><\/div><div class=\"ficha-fila\"><div>12<\/div><div>24<\/div><div>Presentaci\u00f3n final y cierre<\/div><div>Cada alumno hace una demo de su app mostrando el CRUD completo. El docente da retroalimentaci\u00f3n. Se comparte la hoja de ruta para continuar al nivel intermedio: BLoC, Riverpod, Clean Architecture.<\/div><div>Demo en vivo del CRUD. Certificado de finalizaci\u00f3n. Cierre del curso.<\/div><\/div><\/div><p><!-- Resumen del Curso (tabla) --><\/p><h4>Resumen del Curso<\/h4><div class=\"resumen-meses\"><div class=\"resumen-row header-resumen\"><div><strong>Mes<\/strong><\/div><div><strong>Semanas<\/strong><\/div><div><strong>Enfoque<\/strong><\/div><div><strong>Resultado al terminar<\/strong><\/div><\/div><div class=\"resumen-row\"><div><strong>Mes 1<\/strong><\/div><div>1 &#8211; 4<\/div><div>Dart b\u00e1sico + Widgets + Navegaci\u00f3n + Formularios<\/div><div>App de 2-3 pantallas con lista interactiva y formulario validado<\/div><\/div><div class=\"resumen-row\"><div><strong>Mes 2<\/strong><\/div><div>5 &#8211; 8<\/div><div>Firebase Auth + Firestore CRUD completo<\/div><div>CRUD real con login, sesi\u00f3n persistente y datos en Firestore<\/div><\/div><div class=\"resumen-row\"><div><strong>Mes 3<\/strong><\/div><div>9 &#8211; 12<\/div><div>UX + Storage + Refactor + APK + Presentaci\u00f3n<\/div><div>App completa instalada en dispositivo f\u00edsico, lista para portafolio<\/div><\/div><\/div><p><!-- Tecnolog\u00edas y dependencias --><\/p><h4><img decoding=\"async\" class=\"emoji\" role=\"img\" draggable=\"false\" src=\"https:\/\/s.w.org\/images\/core\/emoji\/17.0.2\/svg\/2699.svg\" alt=\"\u2699\ufe0f\" \/> Tecnolog\u00edas y dependencias que se instalan en el curso<\/h4><div class=\"dos-columnas\"><div class=\"bloque-tecnologias\"><strong><img decoding=\"async\" class=\"emoji\" role=\"img\" draggable=\"false\" src=\"https:\/\/s.w.org\/images\/core\/emoji\/17.0.2\/svg\/1f6e0.svg\" alt=\"\ud83d\udee0\ufe0f\" \/> Herramientas<\/strong> \u2022 Flutter SDK + Dart \u2022 VS Code o Android Studio \u2022 Emulador Android o dispositivo f\u00edsico \u2022 Git y GitHub (b\u00e1sico) \u2022 Cuenta Google para Firebase<\/div><div class=\"bloque-tecnologias\"><strong><img decoding=\"async\" class=\"emoji\" role=\"img\" draggable=\"false\" src=\"https:\/\/s.w.org\/images\/core\/emoji\/17.0.2\/svg\/1f4e6.svg\" alt=\"\ud83d\udce6\" \/> Paquetes Flutter<\/strong> \u2022 firebase_core \u2022 firebase_auth \u2022 cloud_firestore \u2022 image_picker + firebase_storage \u2022 flutter_launcher_icons<\/div><div class=\"bloque-tecnologias\"><strong><img decoding=\"async\" class=\"emoji\" role=\"img\" draggable=\"false\" src=\"https:\/\/s.w.org\/images\/core\/emoji\/17.0.2\/svg\/1f525.svg\" alt=\"\ud83d\udd25\" \/> Servicios Firebase<\/strong> \u2022 Firebase Authentication \u2022 Cloud Firestore \u2022 Firebase Storage \u2022 Firebase Console \u2022 Firestore Security Rules (b\u00e1sico)<\/div><\/div><p><!-- Lo que NO entra --><\/p><h4><img decoding=\"async\" class=\"emoji\" role=\"img\" draggable=\"false\" src=\"https:\/\/s.w.org\/images\/core\/emoji\/17.0.2\/svg\/1f6ab.svg\" alt=\"\ud83d\udeab\" \/> Lo que NO entra en este curso (es nivel intermedio)<\/h4><div class=\"grid-tabla\" style=\"grid-template-columns: 1fr 2fr; display: grid;\"><div style=\"display: contents;\"><div style=\"background: #1a5f8a; font-weight: bold; padding: 14px; border: 1px solid #0e4a6f; color: white;\"><strong>No incluido<\/strong><\/div><div style=\"background: #1a5f8a; font-weight: bold; padding: 14px; border: 1px solid #0e4a6f; color: white;\"><strong>Por qu\u00e9 no entra<\/strong><\/div><\/div><div style=\"display: contents;\"><div style=\"padding: 14px; border: 1px solid #b3d4f0; border-top: none;\">BLoC \/ Riverpod \/ GetX<\/div><div style=\"padding: 14px; border: 1px solid #b3d4f0; border-top: none;\">Requieren entender arquitectura. setState es suficiente para b\u00e1sico.<\/div><\/div><div style=\"display: contents;\"><div style=\"padding: 14px; border: 1px solid #b3d4f0; border-top: none;\">Testing unitario y de widgets<\/div><div style=\"padding: 14px; border: 1px solid #b3d4f0; border-top: none;\">No es prioritario para un primer proyecto funcional.<\/div><\/div><div style=\"display: contents;\"><div style=\"padding: 14px; border: 1px solid #b3d4f0; border-top: none;\">Animaciones personalizadas<\/div><div style=\"padding: 14px; border: 1px solid #b3d4f0; border-top: none;\">Requieren tiempo que no alcanza en el b\u00e1sico.<\/div><\/div><div style=\"display: contents;\"><div style=\"padding: 14px; border: 1px solid #b3d4f0; border-top: none;\">Publicaci\u00f3n en Play Store \/ App Store<\/div><div style=\"padding: 14px; border: 1px solid #b3d4f0; border-top: none;\">Se necesita cuenta de desarrollador y proceso de revisi\u00f3n. Va en intermedio.<\/div><\/div><div style=\"display: contents;\"><div style=\"padding: 14px; border: 1px solid #b3d4f0; border-top: none;\">Clean Architecture \/ DDD<\/div><div style=\"padding: 14px; border: 1px solid #b3d4f0; border-top: none;\">Patr\u00f3n valioso pero innecesario para una app b\u00e1sica de aprendizaje.<\/div><\/div><\/div><p><!-- L\u00ednea de cierre visual --><\/p><hr \/><div style=\"text-align: center; color: #1b5a84; font-size: 1.2rem; padding: 1rem;\"><img decoding=\"async\" class=\"emoji\" role=\"img\" draggable=\"false\" src=\"https:\/\/s.w.org\/images\/core\/emoji\/17.0.2\/svg\/2705.svg\" alt=\"\u2705\" \/> 12 semanas \u00b7 24 sesiones \u00b7 Proyecto completo: App con CRUD, Auth, Storage y APK final<\/div><\/div>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-7fb30ee e-grid e-con-boxed e-con e-parent\" data-id=\"7fb30ee\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-5520bd0 elementor-widget elementor-widget-text-editor\" data-id=\"5520bd0\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t\t\t\t\t\t<h4>Requisitos<\/h4><p><b>Conocimientos b\u00e1sicos en:\u00a0<\/b>Programaci\u00f3n Orientada a Objetos.\u00a0<\/p><p><b>Certificado:<\/b>\u00a0Se entrega certificado de participan en formato digital.\u00a0<\/p><p><b>Docente:<\/b>\u00a0Docente especializado el desarrollo de App M\u00f3vil y tendr\u00e1s 2 horas para consultar sobre tus proyectos.\u00a0<\/p><p><b>M\u00e1s Informaci\u00f3n:\u00a0<\/b>+591 60605090 &#8211; +591 72012177\u00a0<\/p><p><a href=\"http:\/\/localhost\/waynasoft\/?p=335&amp;elementor-preview=335&amp;ver=1773871812#\">facebook.com\/waynasoft<\/a><\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-fc032e5 elementor-widget elementor-widget-text-editor\" data-id=\"fc032e5\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t\t\t\t\t\t<h5 style=\"color: #3d3d3d; font-family: Roboto, sans-serif;\"><span style=\"font-weight: bold;\">Forma de Pago<\/span><\/h5><ul><li>Al contado\u00a0<span style=\"font-weight: bolder;\">900 Bs.-<\/span><\/li><li>Pago en 3 cuotas mensuales 350 Bs.- x 3 =\u00a0<span style=\"font-weight: bolder;\">1.050 Bs.-<\/span><\/li><\/ul><p><img decoding=\"async\" class=\"alignleft wp-image-437\" src=\"https:\/\/waynasoft.com.bo\/waynasoft\/wp-content\/uploads\/2026\/03\/WhatsApp-Image-2026-03-17-at-11.21.34-1.jpeg\" alt=\"\" width=\"200\" height=\"236\" \/><\/p><div style=\"display: flex; flex-wrap: wrap; align-items: center; gap: 12px; margin: 20px 0px;\"><span class=\"fake-img fake-img-paypal\">PayPal<\/span><span class=\"icono-paypal\"><img decoding=\"async\" class=\"emoji\" role=\"img\" draggable=\"false\" src=\"https:\/\/s.w.org\/images\/core\/emoji\/17.0.2\/svg\/1f4e7.svg\" alt=\"\ud83d\udce7\" \/>robertoespejoayca@outlook.es<\/span><\/div><p><button class=\"btn-verde\" type=\"submit\"><a href=\"https:\/\/wa.me\/59160605090?text=Quiero+inscribirme+al+curso+de+App+Moviles\">Inscribirme al curso<\/a><\/button><\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-069e1ff e-flex e-con-boxed e-con e-parent\" data-id=\"069e1ff\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-05ea2f9 elementor-widget-divider--view-line elementor-widget elementor-widget-divider\" data-id=\"05ea2f9\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"divider.default\">\n\t\t\t\t\t\t\t<div class=\"elementor-divider\">\n\t\t\t<span class=\"elementor-divider-separator\">\n\t\t\t\t\t\t<\/span>\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-666fe7a elementor-widget elementor-widget-heading\" data-id=\"666fe7a\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t\t<h3 class=\"elementor-heading-title elementor-size-default\">Cursos de Formaci\u00f3n Continua<\/h3>\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-e903811 e-grid e-con-full e-con e-child\" data-id=\"e903811\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-f72837c elementor-arrows-position-inside elementor-pagination-position-outside elementor-widget elementor-widget-image-carousel\" data-id=\"f72837c\" data-element_type=\"widget\" data-e-type=\"widget\" data-settings=\"{&quot;slides_to_show&quot;:&quot;2&quot;,&quot;autoplay_speed&quot;:4000,&quot;image_spacing_custom&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;size&quot;:35,&quot;sizes&quot;:[]},&quot;navigation&quot;:&quot;both&quot;,&quot;autoplay&quot;:&quot;yes&quot;,&quot;pause_on_hover&quot;:&quot;yes&quot;,&quot;pause_on_interaction&quot;:&quot;yes&quot;,&quot;infinite&quot;:&quot;yes&quot;,&quot;speed&quot;:500,&quot;image_spacing_custom_tablet&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;size&quot;:&quot;&quot;,&quot;sizes&quot;:[]},&quot;image_spacing_custom_mobile&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;size&quot;:&quot;&quot;,&quot;sizes&quot;:[]}}\" data-widget_type=\"image-carousel.default\">\n\t\t\t\t\t\t\t<div class=\"elementor-image-carousel-wrapper swiper\" role=\"region\" aria-roledescription=\"carousel\" aria-label=\"Carrusel de im\u00e1genes\" dir=\"ltr\">\n\t\t\t<div class=\"elementor-image-carousel swiper-wrapper\" aria-live=\"off\">\n\t\t\t\t\t\t\t\t<div class=\"swiper-slide\" role=\"group\" aria-roledescription=\"slide\" aria-label=\"1 de 4\"><a data-elementor-open-lightbox=\"yes\" data-elementor-lightbox-slideshow=\"f72837c\" data-elementor-lightbox-title=\"linux\" data-e-action-hash=\"#elementor-action%3Aaction%3Dlightbox%26settings%3DeyJpZCI6MTgxLCJ1cmwiOiJodHRwczpcL1wvd2F5bmFzb2Z0LmNvbS5ib1wvd2F5bmFzb2Z0XC93cC1jb250ZW50XC91cGxvYWRzXC8yMDI2XC8wM1wvbGludXgucG5nIiwic2xpZGVzaG93IjoiZjcyODM3YyJ9\" href=\"https:\/\/waynasoft.com.bo\/waynasoft\/academia\/\"><figure class=\"swiper-slide-inner\"><img decoding=\"async\" class=\"swiper-slide-image\" src=\"https:\/\/waynasoft.com.bo\/waynasoft\/wp-content\/uploads\/2026\/03\/linux.png\" alt=\"linux\" \/><\/figure><\/a><\/div><div class=\"swiper-slide\" role=\"group\" aria-roledescription=\"slide\" aria-label=\"2 de 4\"><a data-elementor-open-lightbox=\"yes\" data-elementor-lightbox-slideshow=\"f72837c\" data-elementor-lightbox-title=\"wordpress\" data-e-action-hash=\"#elementor-action%3Aaction%3Dlightbox%26settings%3DeyJpZCI6MTgyLCJ1cmwiOiJodHRwczpcL1wvd2F5bmFzb2Z0LmNvbS5ib1wvd2F5bmFzb2Z0XC93cC1jb250ZW50XC91cGxvYWRzXC8yMDI2XC8wM1wvd29yZHByZXNzLnBuZyIsInNsaWRlc2hvdyI6ImY3MjgzN2MifQ%3D%3D\" href=\"https:\/\/waynasoft.com.bo\/waynasoft\/academia\/\"><figure class=\"swiper-slide-inner\"><img decoding=\"async\" class=\"swiper-slide-image\" src=\"https:\/\/waynasoft.com.bo\/waynasoft\/wp-content\/uploads\/2026\/03\/wordpress.png\" alt=\"wordpress\" \/><\/figure><\/a><\/div><div class=\"swiper-slide\" role=\"group\" aria-roledescription=\"slide\" aria-label=\"3 de 4\"><a data-elementor-open-lightbox=\"yes\" data-elementor-lightbox-slideshow=\"f72837c\" data-elementor-lightbox-title=\"laravel\" data-e-action-hash=\"#elementor-action%3Aaction%3Dlightbox%26settings%3DeyJpZCI6MTgzLCJ1cmwiOiJodHRwczpcL1wvd2F5bmFzb2Z0LmNvbS5ib1wvd2F5bmFzb2Z0XC93cC1jb250ZW50XC91cGxvYWRzXC8yMDI2XC8wM1wvbGFyYXZlbC5wbmciLCJzbGlkZXNob3ciOiJmNzI4MzdjIn0%3D\" href=\"https:\/\/waynasoft.com.bo\/waynasoft\/academia\/\"><figure class=\"swiper-slide-inner\"><img decoding=\"async\" class=\"swiper-slide-image\" src=\"https:\/\/waynasoft.com.bo\/waynasoft\/wp-content\/uploads\/2026\/03\/laravel.png\" alt=\"laravel\" \/><\/figure><\/a><\/div><div class=\"swiper-slide\" role=\"group\" aria-roledescription=\"slide\" aria-label=\"4 de 4\"><a data-elementor-open-lightbox=\"yes\" data-elementor-lightbox-slideshow=\"f72837c\" data-elementor-lightbox-title=\"movill\" data-e-action-hash=\"#elementor-action%3Aaction%3Dlightbox%26settings%3DeyJpZCI6MTg0LCJ1cmwiOiJodHRwczpcL1wvd2F5bmFzb2Z0LmNvbS5ib1wvd2F5bmFzb2Z0XC93cC1jb250ZW50XC91cGxvYWRzXC8yMDI2XC8wM1wvbW92aWxsLnBuZyIsInNsaWRlc2hvdyI6ImY3MjgzN2MifQ%3D%3D\" href=\"https:\/\/waynasoft.com.bo\/waynasoft\/academia\/\"><figure class=\"swiper-slide-inner\"><img decoding=\"async\" class=\"swiper-slide-image\" src=\"https:\/\/waynasoft.com.bo\/waynasoft\/wp-content\/uploads\/2026\/03\/movill.png\" alt=\"movill\" \/><\/figure><\/a><\/div>\t\t\t<\/div>\n\t\t\t\t\t\t\t\t\t\t\t\t<div class=\"elementor-swiper-button elementor-swiper-button-prev\" role=\"button\" tabindex=\"0\">\n\t\t\t\t\t\t<svg aria-hidden=\"true\" class=\"e-font-icon-svg e-eicon-chevron-left\" viewBox=\"0 0 1000 1000\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\"><path d=\"M646 125C629 125 613 133 604 142L308 442C296 454 292 471 292 487 292 504 296 521 308 533L604 854C617 867 629 875 646 875 663 875 679 871 692 858 704 846 713 829 713 812 713 796 708 779 692 767L438 487 692 225C700 217 708 204 708 187 708 171 704 154 692 142 675 129 663 125 646 125Z\"><\/path><\/svg>\t\t\t\t\t<\/div>\n\t\t\t\t\t<div class=\"elementor-swiper-button elementor-swiper-button-next\" role=\"button\" tabindex=\"0\">\n\t\t\t\t\t\t<svg aria-hidden=\"true\" class=\"e-font-icon-svg e-eicon-chevron-right\" viewBox=\"0 0 1000 1000\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\"><path d=\"M696 533C708 521 713 504 713 487 713 471 708 454 696 446L400 146C388 133 375 125 354 125 338 125 325 129 313 142 300 154 292 171 292 187 292 204 296 221 308 233L563 492 304 771C292 783 288 800 288 817 288 833 296 850 308 863 321 871 338 875 354 875 371 875 388 867 400 854L696 533Z\"><\/path><\/svg>\t\t\t\t\t<\/div>\n\t\t\t\t\n\t\t\t\t\t\t\t\t\t<div class=\"swiper-pagination\"><\/div>\n\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t","protected":false},"excerpt":{"rendered":"<p>Presentaci\u00f3n del Curso\u00a0 Curso pr\u00e1ctico de Flutter y Dart enfocado en aprendizaje directo mediante desarrollo en vivo de un proyecto real. Los estudiantes siguen el c\u00f3digo en sus equipos con teor\u00eda m\u00ednima. Se crea una app de gesti\u00f3n o inventario con autenticaci\u00f3n, CRUD y Firebase Firestore. Al finalizar, cada participante contar\u00e1 con una aplicaci\u00f3n funcional [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":184,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[],"class_list":["post-335","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-sin-categoria"],"_links":{"self":[{"href":"https:\/\/waynasoft.com.bo\/waynasoft\/wp-json\/wp\/v2\/posts\/335","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/waynasoft.com.bo\/waynasoft\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/waynasoft.com.bo\/waynasoft\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/waynasoft.com.bo\/waynasoft\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/waynasoft.com.bo\/waynasoft\/wp-json\/wp\/v2\/comments?post=335"}],"version-history":[{"count":92,"href":"https:\/\/waynasoft.com.bo\/waynasoft\/wp-json\/wp\/v2\/posts\/335\/revisions"}],"predecessor-version":[{"id":666,"href":"https:\/\/waynasoft.com.bo\/waynasoft\/wp-json\/wp\/v2\/posts\/335\/revisions\/666"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/waynasoft.com.bo\/waynasoft\/wp-json\/wp\/v2\/media\/184"}],"wp:attachment":[{"href":"https:\/\/waynasoft.com.bo\/waynasoft\/wp-json\/wp\/v2\/media?parent=335"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/waynasoft.com.bo\/waynasoft\/wp-json\/wp\/v2\/categories?post=335"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/waynasoft.com.bo\/waynasoft\/wp-json\/wp\/v2\/tags?post=335"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}