Slide 1

Slide 1 text

StateFlow y SharedFlow ¿el fin de LiveData?

Slide 2

Slide 2 text

¿State Flow? ¿Shared Flow? Antes de hablar de StateFlow, es necesario definir lo que son los SharedFlow.

Slide 3

Slide 3 text

Entonces ¿Qué es un SharedFlow? De acuerdo a Roman Elizarov, el papi de la implementación de las corutinas, channels y flow en Kotlin “Esencialmente un shared flow (un flujo compartido) es un bus de difusión de eventos ligero que tu puedes crear y usar en la arquitectura de tu aplicación”

Slide 4

Slide 4 text

Pero antes de continuar recordemos de que van los flows...

Slide 5

Slide 5 text

Flows ● Los Kotlin Flows deberían ser empleado en aquellos casos en los que se precisa el retorno de múltiples valor computados asíncronamente ● Los flujos como tal requieren de alguien que recolecte los resultados, por eso se indica que son “fríos” (cold) ● Flow está inspirado en frameworks reactivos como RxJava

Slide 6

Slide 6 text

Flows - ¿Cómo funcionan? flow{ emit() } collect() Terminal flow operator map{} filter{} transform{} take() Flow builder operadores intermedios

Slide 7

Slide 7 text

No content

Slide 8

Slide 8 text

No content

Slide 9

Slide 9 text

Frío….caliente… ¿Siempre debemos recolectar?

Slide 10

Slide 10 text

Dilema ● Los Flows son fríos, por ello no funcionan hasta que alguien los recolecte. ● Pero ¿qué hay con aquellos componentes que emiten datos independientemente de que alguien recolecta sus resultados o no? ¿qué hay con los eventos del usuario?

Slide 11

Slide 11 text

Aquí es donde entra Shared Flow Como comentamos inicialmente, los Shared Flow son algo así como un event bus ligero y configurable.

Slide 12

Slide 12 text

No content

Slide 13

Slide 13 text

No content

Slide 14

Slide 14 text

No content

Slide 15

Slide 15 text

¿...y los State Flows? Es un tipo de Shared Flow especializado. A diferencia de los Shared Flows, un State Flow solo aceptará un valor a la vez reemplazando el valor anterior cada vez que se genere uno nuevo. También, necesita ser inicializado mediante un valor inicial en su constructor.

Slide 16

Slide 16 text

No content

Slide 17

Slide 17 text

No content

Slide 18

Slide 18 text

Espera un minuto… ¿acaso no vi eso antes? Seguro que sí… con los LiveData

Slide 19

Slide 19 text

No content

Slide 20

Slide 20 text

No content

Slide 21

Slide 21 text

¿LiveData desaparecerá? No, en el corto plazo

Slide 22

Slide 22 text

StateFlow vs LiveData Entre las principales diferencias se encuentran que StateFlow es parte de Kotlin y LiveData es parte de Android, por lo cual este último trae “de caja” manejo de estados para el ciclo de vida del componente de Android que lo consuma, mientras que StateFlow no lo tiene y por ello requiere de un esfuerzo extra para conseguir algo parecido.

Slide 23

Slide 23 text

¿LiveData desaparecerá? No, en el corto plazo Posiblemente sí, en el largo plazo

Slide 24

Slide 24 text

Conclusiones

Slide 25

Slide 25 text

Lecturas recomendadas ● Shared flows, broadcast channels https://elizarov.medium.com/shared-flows-broadcast-channels-899b675e805c ● Should we choose Kotlin’s StateFlow or SharedFlow to substitute for Android’s LiveData? https://proandroiddev.com/should-we-choose-kotlins-stateflow-or-sharedflow-to-substitute-for-android-s-livedata-2d 69f2bd6fa5 ● StateFlow and SharedFlow https://developer.android.com/kotlin/flow/stateflow-and-sharedflow ● Should I use SharedFlow or StateFlow in place of LiveData? https://www.reddit.com/r/androiddev/comments/jwdbcf/should_i_use_sharedflow_or_stateflow_in_place_of/ ● StateFlow vs LiveData https://www.reddit.com/r/android_devs/comments/goy67h/stateflow_vs_livedata/ ● Migrating from LiveData to StateFlow https://medium.com/swlh/migrating-from-livedata-to-stateflow-4f28d6889a04

Slide 26

Slide 26 text

Codalot Podcast anchor.fm/codalot youtube.com/devpicon /devpicon