Код: Выделить всё
private val _uiState: MutableStateFlow =
MutableStateFlow(createInitialState(savedStateHandle))
val uiState: StateFlow = _uiState
.onStart { onViewSubscribed() }
.stateIn(
scope = viewModelScope,
started = sharingStarted,
initialValue = _uiState.value
)
Это проверяет эту функцию:
Код: Выделить всё
fun setStates() {
viewModelScope.launch {
updateStateFlow { copy(isLoading = true) }
updateStateFlow { copy(isLoading = false) }
updateStateFlow { copy(isLoading = true) }
updateStateFlow { copy(isLoading = false) }
updateStateFlow { copy(isLoading = true) }
}
}
Код: Выделить всё
@ExperimentalCoroutinesApi
class MainDispatcherExtension(
private val testDispatcher: TestDispatcher = UnconfinedTestDispatcher()
) : BeforeEachCallback, AfterEachCallback {
override fun beforeEach(context: ExtensionContext?) {
Dispatchers.setMain(testDispatcher)
}
override fun afterEach(context: ExtensionContext?) {
Dispatchers.resetMain()
}
}
Код: Выделить всё
fun setStates() {
viewModelScope.launch {
updateStateFlow { copy(isLoading = true) }
delay(1)
updateStateFlow { copy(isLoading = false) }
delay(1)
updateStateFlow { copy(isLoading = true) }
delay(1)
updateStateFlow { copy(isLoading = false) }
delay(1)
updateStateFlow { copy(isLoading = true) }
}
}
Я прочитал эту статью о «объединении» потока состояний и попытался применить ее решение, изменив свой диспетчер runTest на StandardTestDispatcher и, таким образом, согласно статье Turbine будет собирать в UnconfinedTestDispatcher, и мне нужно иметь возможность захватить каждое излучение, но это не сработало. В чем причина? Можете ли вы прояснить это для меня? Возможно, я смогу отметить автора статьи, чтобы узнать, не понял ли я какую-то ее часть.
Изменить: вот минимальный воспроизводимый репозиторий.
Подробнее здесь: https://stackoverflow.com/questions/798 ... th-turbine
Мобильная версия