Tambien tengo recursos gratuitos para el Curso en el Blog
Es importante mencionar, que el curso tambien tiene el formato en libro con el 100% del contenido del mismo, es decir, el curso es equivalente al libro.
En este curso vas a aprender Flutter y Dart desde cero, no requieres conocimientos previos pero sí es importante que sepas programar en cualquier cosa para tomar este curso.
Este es un curso progresivo, por lo tanto vamos a ir de a poco, entre lo más básico hasta cosas más complicadas; pero, antes de entrar en detalle.
Flutter es por una parte un framework y por otra parte una SDK, que fue desarrollada por la propia Google para desarrollar aplicaciones nativas para Android e iOS basados en los principios del Material Design impulsado por Google para su ecosistema de aplicaciones y adoptada por Android desde la versión 5.
Con todo estos conocimientos podrás emplearlos para crear tus propias aplicaciones en Flutter.
Vamos a evaluar uno a uno cada una de las secciones que veremos en el curso:
Flutter es la herramienta del momento cuando se trata en crear aplicaciones móviles para Android e iOS; y esto, no se trata de una moda ni nada que se le aparezca; su sintaxis limpia y expresiva con Dart, su programación declarativa con los widgets y otras características como el Hot Reload, lo convierten en una interesante solución para crear aplicaciones nativas para Android e iOS y que pocas herramientas que ofrecen también soluciones para crear aplicaciones móviles, se les puede comparar.
Aparte de crear aplicaciones para móviles, en versiones recientes del framework, también permiten crear aplicaciones para Linux, Windows y Mac, aparte para web; todo, con un mismo proyecto y pocos cambios para adaptar a cada plataforma.
Nos ofrece un esquema modular entre proyecto y aplicaciones, un conjunto importante de paquetes para extender el ya de por sí, completo framework y con esto, la creación de proyectos escalables.
En este curso, vamos a conocer cómo está formado el framework, las características básicas que nos permite Flutter como SDK para crear aplicaciones móviles, de escritorio y webs, todo con un mismo proyecto base y con pequeñas modificaciones.
En el curso vamos a centrarnos principalmente en el desarrollo móvil.
En definitiva, tendrás un enorme material a tu disposición, para hacer verdaderas aplicaciones.
Este curso está dirigido a cualquiera que quiera comenzar a desarrollar con Flutter; puede que vengas de otro framework o inclusive PHP; en ambos casos es una gran idea aprender de uno de los frameworks webs más avanzados y completos que podrás encontrar.
Para aquellos que quieran conocer el framework y que conozcan otros frameworks webs, pero no tienen los conocimientos necesarios para aventurarse en estos.
Para aquellas personas que quieran aprender algo nuevo, conocer sobre una tecnología que, aunque tiene mucha documentación, la mayoría está en inglés y al estar el framework en constante evolución, tiende a quedar desactualizada.
Para las personas que quieran mejorar una habilidad en el desarrollo de aplicaciones y que quieran crecer como desarrollador.
Para aquellos que quieran aprender o mejorar una habilidad y con esto, aumentar sus posibilidades de empleo o para llevar un proyecto personal.
Para aquellas personas que conozcan el lenguaje de programación de Dart y quieran aprender Flutter.
Por aquí tienes el listado completo de clases que vamos a cubrir en el libro y curso:
Vamos a presentar los tipos de datos en Dart, que son los mismos que en cualquier lenguaje de programación pero de esta manera vamos familiarizándonos con la sintaxis en Dart.
Vamos a conocer los condicionales en Dart, cuyo uso es básico es idéntico que en cualquier lenguaje de programación.
Vamos a crear una lista dinámica, estática y conocer un poco más los tipos dinámicos en Dart.
Vamos a explicar como es el uso de las funciones en Dart, también explicaremos el uso de los parámetros con nombre.
Vamos a ver el uso de las clases en Dart, cómo podemos crear un objeto y los constructores con nombre y sin nombre.
Vamos a seguir trabajando con las clases en Dart, y ahora le llega el turno a los tipos get y set, que al igual que ocurre en Kotlin, su uso es opcional.
Vamos a conocer el uso de la herencia en las clases en Dart.
Vamos a conocer el uso de los Futures que serán un elemento fundamental cuando queramos realizar peticiones a nuestra Rest Api.
Vamos a conocer como funcionan los static en Dart.
Vamos a conocer como podemos emplear la herencia múltiple en Dart.
Vamos a conocer las funciones de flecha.
Vamos a hablar un poco sobre las ventajas que tiene emplear este esquema de Null Safety en Dart y las implicaciones del mismo.
Vamos a hablar sobre como puedes comprobar que versiones de Dart y Flutter estás empleando y cómo puedes actualizar a nuevas versiones.
Vamos a empezar con los ejercicios y conocer los operadores por excelencia para trabajar con los Nul Safety.
Vamos a realizar algunos ejercicios para practicar los tipos de datos que pueden ser nulos con los que no en base a operadores.
Vamos a conocer el uso del atributo required cuando estamos trabajando con clases o funciones y los argumentos con nombre.
Vamos a trabajar con los argumentos opcionales, valores por defecto y el null safety.
Vamos a trabajar con las variables de tipo late que las empleamos cuando tenemos un valor que NO puede ser nulo y le queremos dar un valor "después".
Vamos a resolver algunos ejercicios de la página oficial.
Vamos a resolver algunos ejercicios de la página oficial.
Vamos a instalar Flutter en nuestra PC y configurar el Path del sistema.
Vamos a instalar Flutter en nuestra PC y configurar el Path del sistema.
Vamos a configurar C++ para Desktop en Windows.
Extra: Instalar Flutter en una Mac con M1
Vamos a configurar nuestro equipo para que una vez tengamos instalado Flutter, ahora podamos emplearlo sin problemas en nuestro equipo.
Vamos a crear un emulador en Android Studio que es el que vamos a emplear para el curso.
Vamos a conocer algunos atajos de teclado que te recomiendo si desarrollas en VSC.
Atajo de teclado en VSC
Vamos a conocer como podemos crear un proyecto en Flutter mediante VSC.
Vamos a presentar la estructura base de un proyecto en Flutter.
Vamos a aprender a seleccionar un dispositivo para desarrollar.
Vamos a presentar unos widgets muy sencillos como el de Texto y el de Center.
Vamos a explicar los dos tipos de widgets que tenemos que emplear para crear cualquier tipo de página en widget.
Vamos a emplear el widget de MaterialApp para poder emplear elementos del Material Design.
Vamos a crear una página en blanco para definir como elemento padre nuestros elementos.
Vamos a crear el header o appBar para nuestra app en nuestro Scaffold.
Vamos a presentar el uso de los estilos para los textos.
Vas a crear un estilo personalizado para tu app, en base a lo que vimos anteriormente.
Vamos a presentar el mecanismo por excelencia para poder embeber uno o más widgets en nuestra página en Flutter.
Vamos a presentar como podemos organizar contenido en filas.
Vamos a conocer como podemos mostrar imágenes desde Internet.
Vamos a conocer como podemos mostrar imágenes instaladas localmente en la app.
Vamos a conocer algunos botones en Flutter.
Vamos a hablar sobre los botones que son más empleados y que en versiones recientes de Flutter cambiaron de nombre.
Vamos a crear un componente de Alerta personalizado para mostrar un mensaje.
Vamos a presentar el componente de navegación para visitar otras páginas o cerrar las mismas.
Vamos a crear una carpeta de helpers para crear funciones globales y reutilizables en toda la app.
Vamos a detectar el Sistema Operativo para mostrar una interfaz u otra para nuestro diálogo.
Vamos a conocer como podemos agregar espacios.
Vamos a crear un contenedor para aplicarle algo de estilo.
Vamos a adaptar la app para que no se rompa si tenemos más contenido que pantalla con un scroll automático.
Vas a subir la app a tu repositorio en github.
Vamos a crear un nuevo proyecto mediante VSC.
Vamos a crear el layout base de la app.
Vamos a presentar un widget para obtener contenido/texto del usuario.
Vamos a presentar un widget para la selección.
Vas a intentar mostrar el valor actual o seleccionado del DropdownButton en un componente de texto.
Vamos a recargar el widget de flutter mediante el state que cambiamos de la app.
Vamos a inicializar datos de entrada.
Vamos a conocer el ciclo de vida de nuestra app.
Vamos a crear la interfaz completa para la app.
Vamos a mostrar el texto por defecto en el widget de tipo texto.
Vamos a acomodar un poco más la UI para hacerla más agradable para el usuario.
Vamos a aplicar estilos para los textos.
Vamos a adaptar un poco la posición o distribución de la app y agregar un scroll.
Vamos a crear un componente o control para controlar el campo de texto.
Vamos a hacer una validación y casteo para el valor introducido por el usuario que el mismo sea numérico.
Vamos a hacer una tabla de Excel o cálculo para las fórmulas de conversiones.
Vamos a adaptar la app con la lógica necesaria para que funcione.
Vamos a crear un nuevo proyecto mediante VSC.
Creando el layout base de nuestra app
Vamos a crear los campos de texto que vamos a emplear para guardar la información en los mismos de manera persistente.
Vamos a instalar nuestra primera dependencia para guardar los datos de manera persistente.
Vamos a implementar la lógica para guardar los datos.
Vamos a establecer la lógica para guardar los datos de manera persistente según la estructura que creamos anteriormente.
Vamos a mostrar los datos en los campos de formulario.
Vamos a implementar un botón para limpiar los datos de las preferencias de usuario.
Vamos a convertir la app a un stateful y hacer algunos cambios sutiles en la app para aprovechar este tipo de widget.
Vamos a probar las configuraciones de tipo list de String, crearemos el get y set.
Vamos a registrar los click a los checkbox en nuestras preferencias.
Vamos a crear un listado de String que vamos a convertir el checkbox para poder ser seleccionadas.
Vamos a colocar el estilo para los checkbox y colocar un label.
Vamos a dar una demostración de cómo podemos manejar columnas y otro contenedor mediante una propiedad.
Vamos a crear un nuevo proyecto mediante VSC.
Vamos a crear el layout base de la app.
Vamos a presentar un widget para expandir el contenido según el espacio que tenga disponible.
Vamos a crear un widget de botones y lo haremos reutilizable.
Vamos a crear el diseño principal de la app.
Vamos a instalar una extensión para dibujar un indicador.
Vamos a crear el widget para manejar el timer.
Vamos a crear la primera parte de la función que se va a encargar de llevar el conteo.
Vamos a implementar la función para iniciar y detener el timer.
Vas a crear la función para reiniciar.
Vamos a aplicar algunos detalles finales de la app.
Vamos a explicar algunos conceptos claves sobre el Stram, su widget el StreamBuilder y los procesos asíncronos.
Vamos a elaborar la lógica inicial del stream.
Vamos a construir la función de stream que vamos a consumir en el siguiente vídeo.
Vamos a crear el componente/widget que va a consumir el stream, el streamBuilder y generar nuestro widget de manera dinámica según los cambios que mande el stream.
Vamos a agregar una bandera para devolver el indicador cuando la data es nula.
Vamos a agregar las funciones para los botones inferiores.
Vamos a terminar algunos pequeños detalles en la app.
Vamos a presentar un tipo de widget con el cual podemos obtener las dimensiones de nuestro elemento padre.
Vamos a crear un nuevo proyecto mediante VSC.
Vamos a crear el layout base de la app.
Vamos a crear algunas páginas para probar el componente de navegación.
Vamos a definir las rutas de las páginas que creamos anteriormente.
Vamos a aprender a navegar a una ruta con nombre.
Vamos a volver a la página anterior.
Vamos a crear un componente para colocar tantos botones como páginas tengamos para navegar y navegar hacia las mismas.
Vamos a verificar mediante una función si existe o no una página a la cual volver al hacer el pop.
Vamos a pasar argumentos mediante las rutas.
Vas a crear una página única para ganar reutilización en la app.
Vamos a crear un nuevo proyecto mediante VSC.
Vamos a crear el layout base de la app.
Vamos a hablar sobre el proyecto, el backend que vamos a emplear para obtener los datos y cómo podemos consumirlos en Flutter.
Vamos a instalar una dependencia para poder hacer peticiones http.
Vamos a realizar la primera petición de ejemplo a la Api Rest.
Vamos a hablar sobre la definición de la URI de manera obligatoria al momento de crear una petición mediante el paquete de http.
Al día de hoy la mayoría de las aplicaciones móviles como podcast, streaming de música, películas, series, o videos en general, emails, libros y un enorme etc, se conectan a internet para obtener estos recursos y desplegarlos desde dicha aplicación.
Vamos a crear una clase de ayuda para componer datos básicos para hacer la petición.
Vamos a crear la función constructora para mapear de un mapa a un objeto.
Vamos a crear una clase para manejar toda la respuesta.
Vamos a consumir el recurso de películas con todo lo que creamos hasta este punto.
Vamos a crear una función de promesa para probar el Future que creamos anteriormente y consumirlo desde una página.
Vamos a crear la estructura de páginas para la app.
Vamos a presentar el componente por excelencia para los listados.
Vamos a presentar el widget que nos permite consumir futures que creemos.
Vamos a emplear el componente reutilizable para construir el listado de elementos.
Vamos a mostrar la imagen de la película.
Vamos a crear el componente de carta.
Vas a adaptar la página para que ya no sea necesario emplear un Future para construir el listado.
Vamos a implementar algunas propiedades más para el listado.
Vamos a hacer algunos cambios más en el listado para trabajar en el componente de navegación.
Vamos a crear la página de detalle de la movie para nuestra app.
Vamos a trabajar un poco más en la página de detalle para darle un poco más de vida.
Vamos a conocer un widget que nos permite redondear las esquinas de un contenedor.
Vamos a crear un componente de raiting para mostrar los votos de la película.
Vamos a crear nuestro listado horizontal para mostrar las imágenes de las películas.
Vamos a habilitar el componente de paginación para el listado.
Vamos a mostrar un ícono cuando estemos cargando la paginación.
Vamos a implementar la búsqueda de películas mediante el appbar.
Vamos a terminar de implementar la búsqueda.
Vamos a conocer el componente de navegación por defecto para navegar.
Vamos a hacer el ruteo inicial o la estructura inicial para poder emplear las transiciones.
Vamos a presentar un esquema para poder emplear las transiciones en las páginas, tomando como caso de estudio el escalado.
Vamos a conocer otros ejemplos de transiciones.
Vamos a crear clases para poder reutilizar más fácilmente las transiciones vistas hasta este punto.
Vamos a crear una clase para poder reutilizar más fácilmente las transiciones.
Vamos a emplear una animación de tipo slide en las traslaciones de pantalla.
Vamos a explicar un poco el componente de animación para introducir su funcionamiento.
Vamos a trabajar en las animaciones con los widgets llamados heros.
Vamos a introducir el uso de los temas globales en Flutter.
Vamos a conocer un poco más los temas y conocer los dos temas existentes
Vamos a crear un nuevo proyecto mediante VSC.
Vamos a crear el layout base de la app.
Vamos a crear la pantalla de login que también vamos a emplear para registro.
Vamos a aprender a hacer un buen diseño para los campos de texto.
Vamos a hacer el campo de texto personalizado como componente reutilizable.
Vamos a definir el resto de los campos para la página de formulario.
Vamos a adaptar la página para que podamos emplearla para registrarse.
Vamos a animar cuando escalamos la carta.
Vamos a hacer un ejemplo para escalar un contenedor.
Vamos a definir algunos cambios para poder animar de manera indefinida.
Vamos a aplicar más cambios geométricos sobre la caja.
Vamos a variar los colores de la caja.
Vamos a encadenar las animaciones para que se ejecuten en un momento dado del rango definido.
Vamos a explorar el uso de la función repeat para repetir en ciclos las animaciones.
Vamos a conocer un componente animable.
Vamos a aplicar algunas propiedades más para trabajar con el contenedor de tipo animable.
Vamos a aplicar los dos tipos de contenedores que nos permite realizar animaciones para nuestro contenedor del login.
Vamos a animar el campo para repetir la contraseña.
Vamos a crear un componente para mostrar las imágenes con un buen diseño.
Vamos a crear el efecto de traslado de la imagen en su contenedor.
Vamos a colocar un listener a la imagen.
Vas a subir la app a tu repositorio en github.
Vamos a crear un nuevo proyecto mediante VSC.
Vamos a crear el layout base de la app.
Vamos a crear el modelo principal para la Todo app.
Vamos a instalar la base de datos y un componente que nos va a permitir trabajar con la misma.
Vamos a crear el esqueleto y conexión con la base de datos instalada anteriormente.
Vamos a comenzar definiendo un par de operaciones CRUD.
Vamos a probar las operaciones anteriores.
Vamos a comenzar definiendo un par de operaciones CRUD.
Vamos a probar las operaciones anteriores.
Vas a realizar la operación para obtener un todo por el ID.
Vamos a aprender un poco sobre una posible implementación del patrón bloc, definir dónde lo vamos a almacenar, controladores y sus gets.
Vamos a agregar la lógica de negocio, interacción con la base de datos y el constructor.
Vamos a implementar la conexión desde nuestras páginas al bloc.
Vamos a implementar la función para eliminar un registro.
Vamos a crear la página básica para crear un todo.
Vamos a definir el controlador para los campos de texto.
Vamos a definir el tipo de campo para el campo de texto.
Vamos a realizar algunas pruebas para guardar un todo mediante el bloc.
Importante
Vamos a crear el proceso para actualizar el todo.
Vamos a aplicar unos pequeños detalles sobre la página de listado.
Vamos a resolver el problema que tenemos con las instancias del patrón bloc y crear una instancia única de la misma.
Vas a subir la app a tu repositorio en github.
Vamos a crear un nuevo proyecto mediante VSC.
Vamos a crear el layout base de la app.
Vamos a crear un campo del formulario que luego vamos a replicar.
Vamos a definir el resto de los elementos del formulario.
Vamos a colocar los elementos para procesar el formulario de login.
Vamos a definir un tema para la aplicación, algunos colores principales y estilo para el texto principal.
Vamos a mostrar la contraseña bajo de manda cuando le demos click a un icono de un ojo.
Vamos a hacer unos últimos cambios en la página de login y vamos a colocar un botón para navegar a la página de registrarse y un título.
Vamos a crear la página para registrar.
Vas a subir la app a tu repositorio en github.
Vamos a crear la base de datos en la nube en MondoDB.
Vamos a instalar Strapi para crear rápidamente nuestra Api Rest.
Vamos a conocer algunos aspectos claves sobre Strapi.
Vamos a crear un usuario en Mongo mediante Strapi enviando una petición mediante Flutter.
Vamos a ocultar el botón cuando enviamos una petición.
Vamos a guardar los datos de usuario en las preferencias del usuario.
Vamos a conocer un nuevo componente para mostrar mensajes.
Vamos a emplear nuestro SnackBar para mostrar mensajes de estado de la aplicación.
Vamos a variar algo de estilo de nuestro componente de SnackBar.
Vamos a hacer una redirección programada, cuando nos damos de alta.
Vamos a aplicar los cambios anteriores sobre la página de Login.
Vas a subir la app a tu repositorio en github.
Vamos a presentar el patrón Redux y conocer los gestores de estado.
Vamos a explicar la estructura que vamos a crear e instalar las dependencias.
Vamos a crear la estructura inicial de Redux.
Vamos a crear la estructura para obtener los datos de usuario.
Vamos a mostrar datos de usuario vía el AppBar.
Vamos a adaptar la data de usuario a una clase modelo.
Vamos a terminar de adaptar el diseño del appbar para nuestra aplicación.
Vamos a crear la estructura de contenido para los productos en Strapi.
Vamos a crear un conjunto de productos con los cuales trabajar.
Vamos a configurar el acceso a los recursos rest del producto.
Vamos a consumir los productos mediante la app en Flutter.
Vamos a mapear el mapa de un producto a un objeto.
Vamos a terminar de crear el diseño para nuestra grilla.
Vamos a colocar el precio en el listado.
Vamos a hacer un cambio que ayudará al diseño adaptativo y es variar la cantidad de items por filas según el tamaño u orientación del dispositivo.
Vamos a crear la pantalla de detalle inicial.
Vamos a variar el estado de nuestra data mediante Redux; específicamente variar un booleano para indicar si el producto esta en favoritos o no.
Vamos a terminar la implementación anterior.
Vamos a variar el estado del icono de favorito para que aparezca relleno si el mismo está seleccionado como favorito.
Vamos a plantear un reto de hacer la misma lógica que implementamos anteriormente pero esta vez con la opción del carrito de compras.
Vamos a crear la opción de login desde el appBar de los productos.
Vamos a crear la opción de cerrar la sesión desde el appbar.
Vamos a crear un toggle para mostrar todos los productos o los favoritos.
Vamos a crear una página para mostrar los productos que se encuentran en el carrito.
Vamos a crear la lógica para listar los productos del carrito.
Vamos a crear una clase para mantener un poco más organizado el código que nos permitirá crear un item para el producto.
Vamos a crear la opción de dismissible para el listado en el carrito.
Vamos a crear un diálogo de confirmación para cuando se quiera eliminar un producto del carrito.
Vamos a crear la lógica para eliminar un producto del listado de carritos.
Vamos a realizar una corrección al momento de eliminar un producto.
Vamos a hacer una adaptación de la aplicación para que sea más fácilmente manejable el siguiente cambio.
Vamos a implementar la lógica para poder seleccionar más de un producto para los items del producto.
Vamos a implementar la lógica para poder seleccionar más de un producto para los items del producto.
Vamos a hacer algunas adaptaciones en el modelo de datos para que podamos trabajar con las cantidades para el carrito.
Vamos a crear el esquema que vamos a emplear desde el lado del backend.
Vamos a crear el carrito de compras cuando creemos o registremos un usuario desde la app en Flutter.
Vamos a crear el action del lado de Redux de tipo toggle para el carrito de compras.
Vamos a crear el estado para manejar el carrito de compras desde una propiedad aparte en nuestro state.
Vamos a inicializar el carrito de compras desde nuestra app en Flutter desde lo consumido mediante nuestra RestApi.
Vamos a cargar los datos del carrito de compras en la app.
Vamos a establecer las cantidades en la base de datos mediante la Rest Api.
Vamos a terminar aspectos importantes en la página del carrito como el uso de las cantidades y la opción de eliminar.
Vamos a terminar aspectos importantes en la página de detalle del producto como el uso de las cantidades y la opción de eliminar.
Vamos a colocar un icono o widget para la carga al momento de darle un click al ícono de carrito de compra en la página de detalle.
Vamos a mostrar un mecanismo más flexible en caso de que tengas que despachar acciones de manera inicial en base a algún cambio en el state.
Desde el listado del carrito, vamos a actualizar las cantidades.
Vamos a replicar lo creado para el carrito de compras, para los favoritos.
Vamos a continuar con la adaptación de los favoritos con los usuarios, y vamos a configurar el manejo de usuarios.
Vamos a continuar con la adaptación de los favoritos con los usuarios, vamos a implementar los actions.
Vamos a continuar con la adaptación de los favoritos con los usuarios, y vamos a terminar la integración.
Vamos a hablar sobre lo desarrollado hasta este punto.
Vamos a hablar sobre un bucle que existe actualmenten en la app.
Vamos a hablar sobre la inclusión del try/catch para capturar excepciones en la app.
Vamos a presentar una forma en la cual puedes manipular los errores empleando redux que sería la manera más manual posible.
Vamos a presentar una forma en la cual puedes manipular los errores empleando redux que sería pasando una función al action.
Vamos a presentar una forma en la cual puedes manipular los errores empleando redux que sería creando acciones para los errores.
Vamos a dar un pequeño resumen de lo realizado hasta este punto con los tres métodos que vimos anteriormente.
Vamos a crear una pantalla para recargar la página cuando ocurran errores en la carga.
Vamos a hablar sobre un aspecto fundamental para trabajar con Redux y es la de evitar por error modificar listas u objetos por una asignación simple.
Vamos a hablar sobre los errores de tipo 401 que pueden ocurrir cuando existen problemas con el login.
Vamos a hacer un logout de la app al recibir un código 401 en determinada acción.
Vamos a explicar cual es el funcionamiento de los Middleware en Flutter Redux.
Vamos a presentar la estructura inicial de los middleware de tipo función.
Vamos a realizar algunas pruebas y evidenciar cómo funcionan los middlewares en la app.
Vamos a presentar la estructura inicial de los middleware de tipo clase.
Vamos a emplear la clase de TypedMiddleware para ejecutar acciones marcadas.
Vamos a resumir las configuraciones a nivel de middleware que realizamos hasta este punto.
Vamos a realizar algunas adaptaciones en las acciones para el usuario autenticado.
Vamos a conocer un paquete que nos permite generar fondos dinámicos para nuestras apps.
Vamos a crear el nuevo proyecto.
Vamos a crear el esquema inicial para la aplicación de lugares.
Vamos a crear una caja para mostrar la imagen seleccionada.
Vamos a agregar un menú para agregar lugares.
PlaceAdd: Contenedor de imagen seleccionada
Vamos a configurar la app para seleccionar una imagen desde la app de galería.
Vamos a establecer la imagen seleccionada por el usuario en el contenedor construido anteriormente.
Vamos a configurar la app para seleccionar una imagen desde la app de la cámara.
Vamos a crear un formulario con un campo para crear un sitio con el nombre.
Vamos a crear un modelo de place.
Vamos a instalar y configurar SQFlite para almacenar los place de manera persistente.
De manera demostrativa, se va a crear un registro en la base de datos.
Vamos a guardar la referencia a la imagen en la base de datos.
Vamos a generar un listado inicial.
Vamos a guardar la referencia a la imagen en la base de datos.
Vamos a mostrar la imagen desde el listado.
Vamos a realizar una sencilla validación sobre la imagen seleccionada o no por el usuario y evitar enviar el formulario.
Vamos a completar las operaciones CRUD con eliminar y actualizar.
Vamos a implementar el efecto Swipe para eliminar desde el listado de sitios.
Vamos a editar un sitio, comencemos con la navegación y recibiendo el parámetro del sitio.
Vamos a terminar la edición de un registro.
Vamos a crear una key para el componente de imagen y poder recargar la misma.
Vamos a mostrar un mensaje mediante un SnackBar al usuario cuando elimine o cree sitios.
Daremos una explicación sobre el árbol de widget y la importancia de los manejadores de estados.
Daremos los primeros pasos con Provider instalandolo y mostrando como funciona.
Implementaremos la parte inicial de Providers.
Vamos a implementar el apartado de agregar un sitio.
Vamos a presentar la variación del multi provider para usar varios providers en la aplicación.
Vamos a presentar la variación del Consumer, para interactuar con la clase provider.
Vamos a resumir lo explicado hasta este punto con sus variantes.
Vamos a implementar el apartado de modificar un sitio.
Vamos a implementar el apartado de eliminar un sitio.
Vamos a crear el nuevo proyecto.
Vamos a cambiar el diseño del appbar.
Vamos a crear un listado de selección en el appbar.
Crear widget para el avatar en el appbar.
Vamos a crear el formulario
Vamos a crear un diálogo para editar la información del usuario.
Vamos a dar un poco de estilo al formulario.
Vamos a establecer reglas para limitar el tamaño del formulario.
Vamos a definir conocer un mecanismo para obtener el tamaño de un widget.
Vamos a dividir el body en dos partes.
Vamos a instalar un plugin de calendario.
Vamos a crear el modelo para los to do.
Vamos a crear un listado inicial de to do estático.
Vamos a realizar una animación para el listado.
Vamos a crear la página cuando no hay to do en el listado.
Vamos a crear un listado con imágenes.
Vamos a crear una opción para ver u ocultar la imagen bajo demanda del usuario.
Vamos a usar el widget de AnimatedContainer para el efecto de desaparecer y aparecer las imágenes.
Vamos a crear dos botones para la acción de crear to do.
Vamos a crear el diálogo para manejar los to do.
Vamos a crear el esquema inicial para el formulario.
Vamos a crear el campo para la fecha.
Vamos a establecer una fecha por defecto.
Vamos a realizar la operación para seleccionar una imagen.
Vamos a organizar los datos para crear el to do.
Vamos a crear un listado en base a to do.
Vamos a crear un filtro para seleccionar las to do.
Vamos a implementar la ordenación del listado de to do.
Vamos a crear el modal para eliminar los to do.
Vamos a pasar el mensaje para el dialog de confirmación.
Vamos a crear la funcionalidad de editar to do.
Crearemos la opción para limpiar el filtro.
Vamos a definir el bloque de calendario y listado como adaptable.
Vamos a cambiar el estilo si el tamaño es más pequeño.
Vamos a colocar un bordeado para las imágenes.
Vamos a crear un separador entre el calendario y el listado.
Vamos a manejar un overflow que ocurre al momento de realizar la animación.
Vamos a centrar el título.
Vamos a variar el título a la izquierda al momento de escalar la ventana.
Vamos a crear el proyecto en firebase y configurar a nivel del proyecto.
Vamos a probar la conexión anterior y crear un registro desde el proyecto en Firebase.
Vamos a consumir el listado de to do desde la base de datos.
Vamos a crear un listado mediante los datos recibidos de Cloud Firestore.
Vamos a realizar una demostración de cómo obtener los datos de Cloud Firestore quitando la sincronización.
Vamos a solventar un problema desde el StreamBuilder.
Vamos a crear un to do en Cloud Firestore desde la app.
Vamos a migrar desde un esquema de todo a QueryDocumentSnapshot.
Vamos a terminar el proceso de actualizar.
Vamos a implementar la función de eliminar un to do.
Vamos a habilitar el filtrado.
Vamos a habilitar una ordenación.
Vamos a cargar imágenes en Firebase.
Vamos las imágenes en la base de datos.
Vamos a mostrar imágenes de Firebase en listado de to do.
Aplicaremos algunos cambios en el campo de ImageField para el manejo de la imagen.
Veremos como filtrar listados con ListView u otro en Flutter
Veremos como crear un listado de Widgets en base a un listado de objetos o cualquier otra primitiva en este ejemplo un listado de TextButtons
Te comento sobre como puedes generar un listado con posiciones aleatorias de Widgets en Flutter
Te mostrar como emplear el sistema de GridView en Flutter partiendo de un ListView
Hablaremos sobre como puedes variar el Drawer para que quede est tico si la pantalla es de grandes dimensiones y las ventajas que tiene crear un Scaffold personalizado
- Andrés Cruz
Desarrollo con Laravel, Django, Flask, CodeIgniter, HTML5, CSS3, MySQL, JavaScript, Vue, Android, iOS, Flutter
Acepto recibir anuncios de interes sobre este Blog.
!Cursos desde!
4$
En Academia
Ver los cursos!Libros desde!
1$
Ver los libros