Slackbot
06/11/2021, 8:47 AMJoost Klitsie
06/11/2021, 11:54 AMstateInJoost Klitsie
06/11/2021, 12:09 PMval firstField: StateFlow<String> = MutableStateFlow("a")
val secondField: StateFlow<Int> = MutableStateFlow(11)
    
val scope = CoroutineScope(Dispatchers.Default)
val canDoSomethingScary: StateFlow<Boolean> = scope.combineStates(firstField, secondField) { first, second ->
    first.isNotBlank() && second > 0 && second < 10
}
fun <T, U, R> CoroutineScope.combineStates(
    stateFlow1: StateFlow<T>, 
    stateFlow2: StateFlow<U>, 
    started: SharingStarted = SharingStarted.Eagerly,
	suspendTransform: suspend (T,U) -> R = { arg1, arg2 -> transform(arg1, arg2) },
    transform: (T, U) -> R) = 
    combine(stateFlow1, stateFlow2, suspendTransform).stateIn(this, started, transform(stateFlow1.value, stateFlow2.value))Kirill Vasilenko
06/11/2021, 1:23 PMKirill Vasilenko
06/11/2021, 1:24 PM