Gracias Diego, esto es oro molido, para el tema yo hubiera usado de manera primitiva sharedPreferences para guardarlo, ahora veo que hay formas más avanzadas.
Excelente explicacion, sinceramente lo tenia miedo a la gestion de estados con Bloc y mi desconocimiento me llevo a provider, pero ahora lo entiendo mejor.... buen video. Una pregunta, veo que es mejor no utilizar Paquetes por lo que te preguntare si utilizando Bloc, tuviste la necesidad de utlizar Provider en algun momento?? Podrias subir este ejemplo a GitHhub. Gracias.
Sí, pero más por practicidad, uso provider e implemento bloc a mi manera. En proyectos reales solo necesito Provider para la gestión de estados. Para demos puedo evitar packages, es bueno conocer como funciona Flutter primero para que luego el uso de packages sea sencillo.
@@diegoveloper Por ejemplo bro, yo tengo un carrito de compras, al darle "agregar al carrito", en el icono debe incrementarse en 1 unidad dependiendo de los items que mandes no?, como se guardaría en el celular eso para que si cierra la aplicación no se borre.
@@VicGeek ah pero eso ya no depende de provider, flutter_bloc, etc, sino más de la lógica que manejes, podrías usar shared_preference, sqflite, hive, es tu elección , no es un tema complejo, busca info sobre persistir datos en flutter
Buen videro, pregunta, si eso provider y en ese bloc tengo un metodo que se usa en varias vistas cambiando valores, en todas las vistas que lo uso debo usar el consumer?
Si tienes un provider Global, encima del MaterialApp, entonces si podrás acceder al bloc en las demás vistás, de lo contrario no, solo en la vista que inyectes.
2 preguntas, sensei. La primera, Provider con package o sin package ¿cuál sería tu recomendación? y la segunda, cuando hacemos uso del ChangeNotifierProvider(), ¿debe ir siempre en el main()?
1- Provider solo va bien. 2- No necesariamente. Mira este playlist donde uso Provider y GetX, el primer video es solo de UI, El segundo con GetX y el tercero con Provider: ua-cam.com/video/Ek4tRH19xiY/v-deo.html
Hola diego estuvo muy bueno el video y la explicacion pero tengo una duda el bloc lo hiciste sin usar streams o sink lo entendi q lo hiciste parecido al provider mi duda es en q situaciones se debe aplicar los streams
Tu decides, es a gusto personal, puedes usar Streams, ValueNotifier, ChangeNotifier, como uno se sienta más cómodo, para este caso la forma más sencilla es ChangeNotifier. Incluso cuando traes data en tiempo real de Firestore con Streams, lo puedes transformar a ValueNotifier y emitir datos. ua-cam.com/video/ogXEriEdMDU/v-deo.html
@@diegoveloper geníal la verdad que yo siempre que escuchaba bloc lo relacionaba a streams y ahi todavia sigo pataleando jeje me cuesta un poco a un y justamente por eso tambien lo veia mas facil el uso de provider pero en tu video hasta me parecio mas facil la parte del bloc jeje gracias 😀👍
@@juanpablogonzales7874 Sí, lo que pasa es que las primeras charlas de Google fueron con BLoC + RXDart incluso, más complicado aún, pero luego al salir scopemodel, provider, etc, vieron que habían formas más sencillas de implementar la gestión de estados :)
@@diegoveloper si justamente eso pensaba que bloc era mas complicado que otras opciones como provider y yo rompiendome la cabeza para entender los streams y medio que lo deje ahi de ladito y me pase al team provider pero en tu video el bloc lo vi bastante claro
@@juanpablogonzales7874 Dale, de todas maneras es bueno que aprendas Streams :) , no te olvides de compartir el video, esto me ayuda para seguir generando contenido :D
Hola, pregunta, sabes como es posible con ValueListenableBuilder que usa un ValueNotifier actualizar un TextEditingController() que esta en una clase diferente de donde están los dos primeros
@@diegoveloper este es el caso que tengo. En un archivo tengo una clase que tiene visualmente 3 TextEditingController(), en esa misma clase llamo un endpoint que esta en otro archivo, su respuesta trae los datos para cargar en esos TextEditingController(), como es posible que desde ese segundo archivo cargar los datos que trae el endpoint, no se si me explique bien, gracias
Un BLoC por pantalla me va bien casi siempre, si la pantalla tiene muchos widgets con mucha lógica, prefiero un BLoC por cada widget (complejo), para poder tener los BLoCs más limpios.
Diego tengo una pregunta, tengo un app que carga un listado con la respuesta de un webservice, eso está ok, como haría si por ejemplo no tengo internet, obviamente la tabla no carga pero si quisiera que cuando vuelva internet cargue la tabla llamando al webservice, como lo podría hacer?, gracias
Revisa algun package de conectividad, para que puedas escuchar cambios cuando tienes o no internet -> pub.dev/packages?q=connectivity , en base a eso podrías recargar datos.
Así es, en este caso solo use la clase `bloc` para manejar eventos y estados en esa clase, flutter_bloc te sugiere hacerlo en base a bloc , eventos y estados, bloc gestiona ello, para realizar acciones usas eventos y para mostrar/guardar datos usas estados bloclibrary.dev/#/fluttertodostutorial?id=bloc
@@diegoveloper veo que los guarda en un File, osea mi duda es por buena práctica se debe persistir la información que se usa al momento o se podría tener variables en el bloc que la guarden por así decirlo solo mientras lo usa?
La forma en como persistes eso tú lo defines, puedes guardarlo en file, en preferences, o solo en memoria. Si quieres que tu carrito persista luego de que cierras la app, entonces Shared_preferences/SQFlite/Hive son una buena opción.
@@alexanderrepreza3369 De nada :) buena observación, solo para algunos casos podrías usar stateful, quizás en tu bloc con changenotifier podrías tener un StreamController, por lo cual necesitas liberarlo en el método dispose(), por eso necesitarías stateful/state para en el método dispose del state llamar al bloc.dispose();
@@adalidosmarlimachilopez2449 Si lo usas dentro del widget StreamBuilder, si se libera automaticamente, pero si lo usas suelto para emitir datos con sink.add , entonces hay que liberarlo manualmente , streamController.close()
Provider.of(context, listen:false) , con eso obtienes acceso al provider, ahí puedes usar cualquier método/setter/getter, el listen:false es básico sino no funcionará
uf ya es recontra viejo, jaja, únete al canal para que seas miembro, tendrás acceso a los directos pasados con videos exclusivos de flutter, además desde el plan DEVELOPER tienes acceso a nuestra comunidad de discord donde resolvemos dudas además de hacer sorteos mensuales
Buen video, ahora más claro con bloc y provider, y yo usando los dos a la vez 🤣🤣🤣 solo tengo una duda, que no me queda claro, cuando se usa el context, porque en el video, en la mayoría de los casos no pasas el context
ojo que el package flutter_bloc ya incluye `provider` por dentro, como mencioné , provider es una ayuda para la gestión de estados. El context lo podrías usar cuando quieres mostrar un showDialog , snackbar o si quieres acceder al themedata, mediaquery, etc, en el ejemplo use el context para poder acceder al InheritedWidget. Comparte el video y suscríbete para seguir creando contenido :D
📌 My Playlists
- Flutter Animations Tutorial
ua-cam.com/play/PLrS57q8gZKG9qOwbWYCkJBg39ANvRSvEh.html
- Flutter Challenges
ua-cam.com/play/PLrS57q8gZKG-SvWY9w6JEVVrMRko9txOr.html
- Flutter Tips - 1 minute:
ua-cam.com/play/PLrS57q8gZKG_3Xh77m3jLzEL0aFVY83ev.html
Hola a todos me ayudarían mucho compartiendo el video y el canal para seguir creando contenido :)
También me recomendaron este package pub.dev/packages/hive para manejar base de datos.. que tal sera?
@@jaimehoyosdominguez8404 Es bueno, para base de datos NOSQL y cuando manejas bastante información en tu dispositivo.
Eres súper bueno Diego! Llevaba un montón de tiempo buscando como hacerlo sin paquete
Gracias Diego, esto es oro molido, para el tema yo hubiera usado de manera primitiva sharedPreferences para guardarlo, ahora veo que hay formas más avanzadas.
Excelente @diegoveloper , con Streams algunos ejemplos....
gracias por la excelente explicación
Impresionante!!! Muchas gracias por tan completa explicación. Eres grande!!
Excelente video, muchas gracias.
Yeah nice explanation and example on state management.
Mi primer comentario como Miembro Developer
Excelente video, puedes hablar sobre como implementar SQLite con buenas practicas ?
Gracias diego me aclaraste muchas dudas, estaré pendiente en los siguientes videos.
gracias :D justo acabo de subir uno nuevo
Hola Diego, muy clara la explicación!
Genial!! cual seria para ti la mejor forma de hacerlo en base a tu experiencia?
No existe una mejor forma de hacerlo, usa el package que más te guste y con el que tú y tu equipo se sientan más cómodos.
@@diegoveloper Grandioso crack! si usamos MultipleProvider seguiria la misma logina de un Provider normal?
así es, sería lo mismo pero menos elegante usar providers concatenados, para eso está el multiprovider :)
Excelente explicacion, sinceramente lo tenia miedo a la gestion de estados con Bloc y mi desconocimiento me llevo a provider, pero ahora lo entiendo mejor.... buen video. Una pregunta, veo que es mejor no utilizar Paquetes por lo que te preguntare si utilizando Bloc, tuviste la necesidad de utlizar Provider en algun momento?? Podrias subir este ejemplo a GitHhub. Gracias.
Sí, pero más por practicidad, uso provider e implemento bloc a mi manera.
En proyectos reales solo necesito Provider para la gestión de estados. Para demos puedo evitar packages, es bueno conocer como funciona Flutter primero para que luego el uso de packages sea sencillo.
No esperaba menos de tus videos Diego, ojala puedas subir más videos del funcionamiento del provider.
Gracias :D, algo en específico sobre Provider?
@@diegoveloper Por ejemplo bro, yo tengo un carrito de compras, al darle "agregar al carrito", en el icono debe incrementarse en 1 unidad dependiendo de los items que mandes no?, como se guardaría en el celular eso para que si cierra la aplicación no se borre.
@@VicGeek ah pero eso ya no depende de provider, flutter_bloc, etc, sino más de la lógica que manejes, podrías usar shared_preference, sqflite, hive, es tu elección , no es un tema complejo, busca info sobre persistir datos en flutter
gracias me quedo muy claro
muy bueno, podrías hablar un poco de test en flutter en un próximo vídeo?
Creo que eso podría ser un tema para un live en the dart side :p , prepararé un challenge con animaciones para el sgte video.
Excelente video, está muy claro. Gracias !
Buen video! Saludos desde Chile :D
Buen videro, pregunta, si eso provider y en ese bloc tengo un metodo que se usa en varias vistas cambiando valores, en todas las vistas que lo uso debo usar el consumer?
Si tienes un provider Global, encima del MaterialApp, entonces si podrás acceder al bloc en las demás vistás, de lo contrario no, solo en la vista que inyectes.
@@diegoveloper perfecto, gracias
muy buen vídeo, muchas gracias!!!
2 preguntas, sensei. La primera, Provider con package o sin package ¿cuál sería tu recomendación? y la segunda, cuando hacemos uso del ChangeNotifierProvider(), ¿debe ir siempre en el main()?
1- Provider solo va bien.
2- No necesariamente. Mira este playlist donde uso Provider y GetX, el primer video es solo de UI, El segundo con GetX y el tercero con Provider: ua-cam.com/video/Ek4tRH19xiY/v-deo.html
@@diegoveloper ¡capo! me encanta este sector y gracias por el apoyo y la dedicación que brindas a toda la comunidad
Tengo que refactorizar mucho código jajajaja, gracias Diego
Jaja, siempre hay que refactorizar :D , comparte el video para seguir creando contenido
Muy bueno muchas gracias como siempre
Hola diego estuvo muy bueno el video y la explicacion pero tengo una duda el bloc lo hiciste sin usar streams o sink lo entendi q lo hiciste parecido al provider mi duda es en q situaciones se debe aplicar los streams
Tu decides, es a gusto personal, puedes usar Streams, ValueNotifier, ChangeNotifier, como uno se sienta más cómodo, para este caso la forma más sencilla es ChangeNotifier. Incluso cuando traes data en tiempo real de Firestore con Streams, lo puedes transformar a ValueNotifier y emitir datos. ua-cam.com/video/ogXEriEdMDU/v-deo.html
@@diegoveloper geníal la verdad que yo siempre que escuchaba bloc lo relacionaba a streams y ahi todavia sigo pataleando jeje me cuesta un poco a un y justamente por eso tambien lo veia mas facil el uso de provider pero en tu video hasta me parecio mas facil la parte del bloc jeje gracias 😀👍
@@juanpablogonzales7874 Sí, lo que pasa es que las primeras charlas de Google fueron con BLoC + RXDart incluso, más complicado aún, pero luego al salir scopemodel, provider, etc, vieron que habían formas más sencillas de implementar la gestión de estados :)
@@diegoveloper si justamente eso pensaba que bloc era mas complicado que otras opciones como provider y yo rompiendome la cabeza para entender los streams y medio que lo deje ahi de ladito y me pase al team provider pero en tu video el bloc lo vi bastante claro
@@juanpablogonzales7874 Dale, de todas maneras es bueno que aprendas Streams :) , no te olvides de compartir el video, esto me ayuda para seguir generando contenido :D
Excelente !!!
Gracias !!!
Hola, pregunta, sabes como es posible con ValueListenableBuilder que usa un ValueNotifier actualizar un TextEditingController() que esta en una clase diferente de donde están los dos primeros
El TextEditingController es un listenable, así que podrías actualizarlo directamente desde otra clase.
@@diegoveloper este es el caso que tengo. En un archivo tengo una clase que tiene visualmente 3 TextEditingController(), en esa misma clase llamo un endpoint que esta en otro archivo, su respuesta trae los datos para cargar en esos TextEditingController(), como es posible que desde ese segundo archivo cargar los datos que trae el endpoint, no se si me explique bien, gracias
Ejemplo: Clase BloC (lógica de negocios)
@@diegoveloper ah ok perfecto, muchas gracias, lo estaba haciendo con un interface
muy buen video bro, sigue así!
Prefieres hacer el bloc por pantalla o por funciones?
Un BLoC por pantalla me va bien casi siempre, si la pantalla tiene muchos widgets con mucha lógica, prefiero un BLoC por cada widget (complejo), para poder tener los BLoCs más limpios.
Excelente contenido
Hola diego una pregunta como hacer para organizar la app de esa manera digo las paginas para que tengas 2 apps dentro de una sola
Solo crea botones y enlaza a vistas distintas, es lo que hice
gracias
Diego tengo una pregunta, tengo un app que carga un listado con la respuesta de un webservice, eso está ok, como haría si por ejemplo no tengo internet, obviamente la tabla no carga pero si quisiera que cuando vuelva internet cargue la tabla llamando al webservice, como lo podría hacer?, gracias
Revisa algun package de conectividad, para que puedas escuchar cambios cuando tienes o no internet -> pub.dev/packages?q=connectivity , en base a eso podrías recargar datos.
@@diegoveloper gracias, voy a revisar, he visto algo que se llama RX pero no entendí como funciona, con eso sería posible?
Eso es un package de reactividad, no es necesario, puedes manejar el estado de muchas formas como explico en el video
@@diegoveloper perdon preguntar tanto, eso de RX para que se usa?
medium.com/flutter-community/why-use-rxdart-and-how-we-can-use-with-bloc-pattern-in-flutter-a64ca2c7c52d
Usando flutter_bloc las variables de datos como un carrito de compras debería de estar declarada en el bloc?
Así es, en este caso solo use la clase `bloc` para manejar eventos y estados en esa clase, flutter_bloc te sugiere hacerlo en base a bloc , eventos y estados, bloc gestiona ello, para realizar acciones usas eventos y para mostrar/guardar datos usas estados bloclibrary.dev/#/fluttertodostutorial?id=bloc
@@diegoveloper veo que los guarda en un File, osea mi duda es por buena práctica se debe persistir la información que se usa al momento o se podría tener variables en el bloc que la guarden por así decirlo solo mientras lo usa?
La forma en como persistes eso tú lo defines, puedes guardarlo en file, en preferences, o solo en memoria.
Si quieres que tu carrito persista luego de que cierras la app, entonces Shared_preferences/SQFlite/Hive son una buena opción.
@@diegoveloper gracias
Utilizando el changenotifier los widgets pueden ser stateless?
Así es
@@diegoveloper excelente gracias!
@@alexanderrepreza3369 De nada :) buena observación, solo para algunos casos podrías usar stateful, quizás en tu bloc con changenotifier podrías tener un StreamController, por lo cual necesitas liberarlo en el método dispose(), por eso necesitarías stateful/state para en el método dispose del state llamar al bloc.dispose();
@@diegoveloper en un statelesswidget no se libera automáticamente el stream ?
@@adalidosmarlimachilopez2449 Si lo usas dentro del widget StreamBuilder, si se libera automaticamente, pero si lo usas suelto para emitir datos con sink.add , entonces hay que liberarlo manualmente , streamController.close()
Cómo puedes usar un setter de provider en el initState de un widget?
Provider.of(context, listen:false) , con eso obtienes acceso al provider, ahí puedes usar cualquier método/setter/getter, el listen:false es básico sino no funcionará
Oye bro qué opinas sobre GetX?
No lo he probado, solo lo he visto, siento que es muy intrusivo.
Me haz abierto los ojos jaja
te hago una pregunta brother , videos para aprender flutter desde cero no tenes ?
no, pero hay muchos en youtube, solo busca: curso flutter o curso dart
puedes pasarnos el repositorio de ese proyecto bro ?
uf ya es recontra viejo, jaja, únete al canal para que seas miembro, tendrás acceso a los directos pasados con videos exclusivos de flutter, además desde el plan DEVELOPER tienes acceso a nuestra comunidad de discord donde resolvemos dudas además de hacer sorteos mensuales
Se que el video es algo antiguo ya, pero bueno actualmente me gusta muchisimo mas Riverpod que todos los demas.
Buen video, ahora más claro con bloc y provider, y yo usando los dos a la vez 🤣🤣🤣 solo tengo una duda, que no me queda claro, cuando se usa el context, porque en el video, en la mayoría de los casos no pasas el context
ojo que el package flutter_bloc ya incluye `provider` por dentro, como mencioné , provider es una ayuda para la gestión de estados. El context lo podrías usar cuando quieres mostrar un showDialog , snackbar o si quieres acceder al themedata, mediaquery, etc, en el ejemplo use el context para poder acceder al InheritedWidget.
Comparte el video y suscríbete para seguir creando contenido :D
diegoveloper ósea se usa de la misma forma que en nativo, Gracias 👏🏼
@@jomardevtech así es, conceptos similares
Excelente video, gracias.