Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

190
Vistas
Convertir datos en vivo a flujo de estado

Android, Kotlin

Tengo los siguientes datos en vivo en mi clase de fuente de datos, no puedo cambiarlos a StateFlow, así que necesito convertirlos a StateFlow en mi modelo de vista

 val trackingCatalogInitialLoadLiveData: LiveData<Pair<CatalogTracking, Int>> by lazy { instantSearchDataSourceLiveData.switchMap { instantSearchDataSource -> instantSearchDataSource.initialLoadLiveData } }

En My ViewModel tengo lo siguiente, y esta es la parte de la que no estoy seguro si esta es la forma correcta de convertir LiveData a StateFlow:

 val trackingCatalogInitialLoadStateFlow: StateFlow<Pair<CatalogTracking, Int>> by lazy { instantSearchDataSourceFactory.trackingCatalogInitialLoadLiveData.asFlow() .stateIn(viewModelScope, SharingStarted.Lazily, Pair(CatalogTracking(), 0)) }

Luego, en mi fragmento, solo recopilo los resultados.

 coroutineScope.launch { mInstantSearchViewModel.trackingCatalogInitialLoadStateFlow.collect { trackingPair -> // code here }

¿Es esta la mejor práctica para convertir LiveData a StateFlow? ¿Algo que deba estar pendiente?

over 4 years ago · Santiago Trujillo
1 Respuestas
Responde la pregunta

0

No necesitas usar by lazy . asFlow() y stateIn() crean contenedores simples, por lo que es trivial llamarlos directamente en el inicializador de propiedades.

Como dijo @Joffrey, si usa SharingStarted.Lazily , inspeccionar el value del flujo antes de que tenga colectores mostrará incorrectamente el valor inicial proporcionado. Dado que LiveData está de moda, iniciar su StateFlow de forma perezosa no le compra mucho. La corrutina subyacente que transfiere los valores de LiveData al StateFlow está haciendo una cantidad de trabajo trivial.

Si no necesita inspeccionar el value (en la mayoría de los casos, probablemente no lo necesite), entonces debería estar bien dejarlo como un Flujo frío. Aunque el flujo de asFlow() está frío, el LiveData subyacente todavía está caliente, por lo que cuando los recopiladores del flujo lo recopilen, siempre obtendrán el valor más reciente. La principal diferencia de comportamiento sería si su fuente de datos no proporciona un valor inicial garantizado para LiveData, entonces un StateFlow le brinda la oportunidad de emitir su valor predeterminado proporcionado inicialmente sin esperar a que LiveData publique su primer valor.

over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda