el problema no es el init del ViewModel. el problema es que en tu fragmento no estabas utilizando la instancia del viewModel. Sí, lo estabas inyectando, pero sólo se va a proveer la dependencia para cuando realmente la utilices. Has de cuenta que inyectar es casi casi como un lateinit.
Otra cosita, el flow no muere para cuando el viewModelScope muere. Simplemente se deja de colectar. Supongamos que tienes una instancia Singleton de tu Repository que tiene como propiedad un flow. Esa propiedad la consumes en dos viewModels distintos en sus respectivos fragmentos. Ambos fragmentos los atachas a una actividad y puedes ver cómo consumen el mismo flow porque el repo es la misma instancia. Si remueves un fragmento, entonces su viewModel muere, pero el flow no, ya que el otro fragmento sigue emitiendo valores desde donde se quedó.
Para un flow simplemente es que no tenga ningún tipo de collector. Recordemos que un flow es un cold flow. Es decir, éste va emitir valores siempre y cuando exista al menos un collector activo. Por ejemplo, si tienes una activity que collecta un flow, navegas a otra actividad y quitas la anterior haciendo un finish, el flow se deja de collectar y por tanto, por más el repository quiera emitir nuevos valores porque se está modificando, por ejemplo, la base de datos, no lo va hacer. Cosa que es no lo mismo para un SharedFlow o StateFlow, ya que éstos son hot flows @@rodrigoseverianogarcia6059
El uso de flow puede servir como un listening a un servicio web, por ejemplo que cada cierto tiempo, mi app verifica la sesion a un servicio web si sigue activa o a caducado, en dado caso de que caduque hacer una accion y si sigue activa que se mantenga logueado el usuario
Aprendí mucho con este video gracias, seria genial si hicieras test del viewmodel manejando como respuesta las clases selladas, ya que al menos en mi caso no puedo burlar las clases selladas simulando los casos Succes o Error.
La razón de que no cargue la función example() desde init es que el view model no se inicia cuando se declara. Llamando a una función sin nada dentro, por ejemplo initializeFirstBlood(),el init sería ejecutado
Aris el problema del Init, es por que la intancia del viewmodel aun no esta lista, si inicializas una copia del viewmodel entonces ya tienes a dispocicion init
Quería hacer una aplicación en la que necesito tipo 3 en raya, ajedrez, me apaño para hacer las columnas y las celdas en jetpack compose, para pintarles imágenes de figuras o fichas, pero no sé como ponerles un id a cada celda, establecer una matriz para y en funcion de la que pulses hacer una cosa u otra, es algo práctico que se sale a lo mejor de tu trazado de contenido, pero te agradecería si consideraras hacer algo parecido, para enseñar las bases, gracias. He pensado en hacer una clase que se le de un id y cree un Box para cada casilla, pero se me atasca un poquito.
Me estás diciendo que puedo resolver lo de recibir.. Por ejemplo, Datos desde un microservicio?? 😱😱😱No me arrepiento de haberme subscrito.. Toma broth.. Ahí tienes tomo mi dinero 💸💸💸💸💸
Muchas gracias aristidev, aprendo mucho con tus videos, eres un fenomeno. Tengo un problema y no se como solucionarlo en mi aplicacion, cojo los datos desde firebase realtime y cuando cambian los meto en room que me actualiza la vista mediante flow, pero si hay muchos cambios se vuelve loco el recyclerview. Puedo hacer algo para que actualice el recycler sin que se note tanto? Es en androidtv y molesta mucho la verdad. Gracias
Ojalá hubiera visto este video antes de pelearme durante días con ellos hasta entenderlos jajaja. Me resulta curioso que digas que no has conseguido iniciarlos en el init() del ViewModel, cuando yo en mi app si los inicio ahí.
No le funciona porque al inicio del vídeo cuando pone el flow en el init no está ocupando el viewModel en el activity solo lo declaro, si lo hiciera al final del vídeo y pusiera el ejemplo dentro del init, para obtener lo del repo, ya serviría porque el activity ya ocupa el viewModel al recolectar lo que tiene el stateFlow
la ventaja de flow son sus maravillosas funciones de extensión. Puedes hacer una buena cantidad de operaciones dentro del flow e incluso combinar varios flows en uno sólo.
@@calixtoandrade996 Eso mismo también se puede hacer con Rx pero lo que desconozco es la variedad de distintas operaciones que existe entre Flow y Rx. Gracias por tu comentario
yo creo que es irrelevante el framework de vista. En este video se habla de los flows y arquitecturas. Si estás más interesado en Compose, en Udemy Aris tiene un buen curso sobre eso
¡Si quieres más tutoriales SÍGUEME! aristi.dev
el problema no es el init del ViewModel. el problema es que en tu fragmento no estabas utilizando la instancia del viewModel. Sí, lo estabas inyectando, pero sólo se va a proveer la dependencia para cuando realmente la utilices. Has de cuenta que inyectar es casi casi como un lateinit.
Otra cosita, el flow no muere para cuando el viewModelScope muere. Simplemente se deja de colectar. Supongamos que tienes una instancia Singleton de tu Repository que tiene como propiedad un flow. Esa propiedad la consumes en dos viewModels distintos en sus respectivos fragmentos. Ambos fragmentos los atachas a una actividad y puedes ver cómo consumen el mismo flow porque el repo es la misma instancia. Si remueves un fragmento, entonces su viewModel muere, pero el flow no, ya que el otro fragmento sigue emitiendo valores desde donde se quedó.
muy interesante ese aporte!
Entonces tengo una duda. ¿Cuál sería la manera correcta de detener el flow?
Para un flow simplemente es que no tenga ningún tipo de collector. Recordemos que un flow es un cold flow. Es decir, éste va emitir valores siempre y cuando exista al menos un collector activo. Por ejemplo, si tienes una activity que collecta un flow, navegas a otra actividad y quitas la anterior haciendo un finish, el flow se deja de collectar y por tanto, por más el repository quiera emitir nuevos valores porque se está modificando, por ejemplo, la base de datos, no lo va hacer.
Cosa que es no lo mismo para un SharedFlow o StateFlow, ya que éstos son hot flows
@@rodrigoseverianogarcia6059
Siempre encuentras la mejor manera de explicar las cosas, eres un crack
Buenísimo, Aris. Este tema da mucho tema pero lo explicas de maravilla.
Porqué no he visto antes este TREMENDO video!!!!! Gracias!!!🙌🙌🙌🙌
Te amo weon gracias por tus videos me ayudan muchisimo a aprender ❤
Aris,. Gracias x el video. este contenido vendría de 10 para agregar en el curso de udemy..!
Videardo guapo para repasar conceptos! Gracias como siempre Aris, eres un jefe!
Muchas gracias! Esté contenido es de lo mejor.
sos una estrella nunca dejes de brillar
Primeraaa! Gracias por el video Aris ❤
Gracias por tu talento de explicar, y por compartir con los demas ❤
pedazo de crack!! Muchas gracias por hacer fácil lo complicado!!
Bien claro. El ultimo video haslo consumiendo un api. 🎉🎉🎉
Excelente tutorial hermano, muchas gracias.
El uso de flow puede servir como un listening a un servicio web, por ejemplo que cada cierto tiempo, mi app verifica la sesion a un servicio web si sigue activa o a caducado, en dado caso de que caduque hacer una accion y si sigue activa que se mantenga logueado el usuario
Aprendí mucho con este video gracias, seria genial si hicieras test del viewmodel manejando como respuesta las clases selladas, ya que al menos en mi caso no puedo burlar las clases selladas simulando los casos Succes o Error.
se engancha automagicamente ajjaja que maestro! xD
Gracias justo andaba buscando esto
Excelente video Aris
Qué fácil suena todo cuando lo explicas tú
La razón de que no cargue la función example() desde init es que el view model no se inicia cuando se declara. Llamando a una función sin nada dentro, por ejemplo initializeFirstBlood(),el init sería ejecutado
Aris el problema del Init, es por que la intancia del viewmodel aun no esta lista, si inicializas una copia del viewmodel entonces ya tienes a dispocicion init
Quería hacer una aplicación en la que necesito tipo 3 en raya, ajedrez, me apaño para hacer las columnas y las celdas en jetpack compose, para pintarles imágenes de figuras o fichas, pero no sé como ponerles un id a cada celda, establecer una matriz para y en funcion de la que pulses hacer una cosa u otra, es algo práctico que se sale a lo mejor de tu trazado de contenido, pero te agradecería si consideraras hacer algo parecido, para enseñar las bases, gracias. He pensado en hacer una clase que se le de un id y cree un Box para cada casilla, pero se me atasca un poquito.
El puto amo.
muy capo
La mejor explicacion muchas gracias
Cuando un video de un juego de cartas? :)
puedes hacerlo en jetpack compose 😢
explicastes lo que es el Flow Como si fuesemos retrasados
Me gusta, asi deberian ser todos los Tutoriales xDDD
Me estás diciendo que puedo resolver lo de recibir.. Por ejemplo, Datos desde un microservicio?? 😱😱😱No me arrepiento de haberme subscrito.. Toma broth.. Ahí tienes tomo mi dinero 💸💸💸💸💸
Genio
HEY ARI Que tan bueno es usar Flutter?
Tengo entendido que en caso de UiState este debo collectarlo en mi Ui con un collectLatest{} ya que no quiero mostrar estados que ya pasaron
Dependiendo de tus casos de uso
Aris porque no usas datasource
Yo compré el de udemy. Pero entiendo es el mismo de codeacademy correcto?...
excelente
Muchas gracias aristidev, aprendo mucho con tus videos, eres un fenomeno. Tengo un problema y no se como solucionarlo en mi aplicacion, cojo los datos desde firebase realtime y cuando cambian los meto en room que me actualiza la vista mediante flow, pero si hay muchos cambios se vuelve loco el recyclerview. Puedo hacer algo para que actualice el recycler sin que se note tanto? Es en androidtv y molesta mucho la verdad. Gracias
Con DiffCallback quizá pueda ayudar un poco las operaciones que se hacen sobre el recycler
Saludos, cuando estas para saber cuando el uiState debe ser igual a _uiState y cuando a _uiState.AsStateFlow()
Ojalá hubiera visto este video antes de pelearme durante días con ellos hasta entenderlos jajaja. Me resulta curioso que digas que no has conseguido iniciarlos en el init() del ViewModel, cuando yo en mi app si los inicio ahí.
No le funciona porque al inicio del vídeo cuando pone el flow en el init no está ocupando el viewModel en el activity solo lo declaro, si lo hiciera al final del vídeo y pusiera el ejemplo dentro del init, para obtener lo del repo, ya serviría porque el activity ya ocupa el viewModel al recolectar lo que tiene el stateFlow
Buenas! buen vídeo como siempre.
Una pregunta: no me deja entrar al Discord. "No se puede aceptar la invitación".
A alguno le ha pasado lo mismo ?
DEBERIAS HACER UN VIDEO HABLANDO DE ADMOB, PORQUE ES CONFUSO AHORA COMO SE MONETIZA, NO SE ENTIENDE
Qué ventajas o desventejas podría tener flow sobre usar RxJava/RxKotlin? viendo el video me imagino algunas pero me gustaría tu opinión
Bueno para mí lo fundamental es que cuentas con un recurso propio del lenguaje, así te evitas el uso de librerías externas
la ventaja de flow son sus maravillosas funciones de extensión. Puedes hacer una buena cantidad de operaciones dentro del flow e incluso combinar varios flows en uno sólo.
@@janderlaffitaordunez3126 Ese es un buen punto, gracias por tu comentario
@@calixtoandrade996 Eso mismo también se puede hacer con Rx pero lo que desconozco es la variedad de distintas operaciones que existe entre Flow y Rx. Gracias por tu comentario
Ya no expliques en formato xml utiliza jetpack please que para halla es q vamos el futuro
yo creo que es irrelevante el framework de vista. En este video se habla de los flows y arquitecturas. Si estás más interesado en Compose, en Udemy Aris tiene un buen curso sobre eso
@@calixtoandrade996 cuanta razón!!
pero no me veas directo a los ojos porfavor 👉👈