Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

188
Views
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 answers
Answer question

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!