myanmarking
09/09/2021, 12:20 PMdata class State(
val state1: State1,
val state2: State2
)
class ViewModel{
val state = flowOf<State?>(...)
.distinctUntilChanged()
}
fun screen1(){
Surface{
val viewState by viewModel.state.collectAsState(null)
composeFun1(viewState.state1)
composeFun2(viewState.state2)
}
}
fun screen2(){
Surface{
val viewState1 by viewModel.state.map{it.state1}.collectAsState(null)
val viewState2 by viewModel.state.map{it.state2}.collectAsState(null)
composeFun1(viewState1)
composeFun2(viewState2)
}
}
Csaba Szugyiczki
09/09/2021, 12:26 PMLogCompositions
from the article to test your code for recomposition counts
https://kotlinlang.slack.com/archives/CJLTWPH7S/p1631121924035700Albert Chang
09/09/2021, 12:42 PMremember(viewModel) { viewModel.state.map { it.state1 } }.collectAsState(null)
.Albert Chang
09/09/2021, 12:43 PMmyanmarking
09/09/2021, 12:46 PMmyanmarking
09/09/2021, 12:47 PMAlbert Chang
09/09/2021, 12:47 PMmyanmarking
09/09/2021, 12:48 PMAlbert Chang
09/09/2021, 12:49 PMremember
is needed because viewModel.state.map { it.state1 }
return a new flow every time it is called, and it will be called on every recomposition.myanmarking
09/09/2021, 12:51 PMAlbert Chang
09/09/2021, 12:51 PMAlbert Chang
09/09/2021, 12:52 PMremember
and collectAsState
isn't free.myanmarking
09/09/2021, 1:01 PMAdam Powell
09/09/2021, 2:18 PMAdam Powell
09/09/2021, 2:20 PMAdam Powell
09/09/2021, 2:22 PMAdam Powell
09/09/2021, 2:24 PMmyanmarking
09/09/2021, 2:24 PMmyanmarking
09/09/2021, 2:25 PM