Код: Выделить всё
class YourRepository {
private var counter = 0
fun dataStream(): Flow = flow {
while (true) {
counter++
val newData = YourDataClass(
info = "Update #$counter",
timestamp = System.currentTimeMillis(),
)
emit(newData)
delay(5.seconds)
}
}
}
- Использование FlatMapLatest:
Код: Выделить всё
class YourViewModel( repository: YourRepository, ) : ViewModel() { val uiState: StateFlow = repository.dataStream() .flatMapLatest { data -> flow { emit(DataUiState.Updating) delay(2.seconds) emit(DataUiState.Success(data)) } } .stateIn( scope = viewModelScope, started = SharingStarted.WhileSubscribed(5.seconds), initialValue = DataUiState.InitialLoading, ) } - Использование преобразования:
Код: Выделить всё
class YourViewModel( repository: YourRepository, ioDispatcher: CoroutineDispatcher = Dispatchers.IO, ) : ViewModel() { val uiState: StateFlow = repository.dataStream() .transform { data -> emit(DataUiState.Updating) delay(2.seconds) emit(DataUiState.Success(data)) } .flowOn(ioDispatcher) .stateIn( scope = viewModelScope, started = SharingStarted.WhileSubscribed(5.seconds), initialValue = DataUiState.InitialLoading, ) }
Подробнее здесь: https://stackoverflow.com/questions/797 ... flatmaplat