Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

189
Visualizações
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 Respostas
Responde à pergunta

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 Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda