ken_kentan
04/19/2023, 10:59 AMNativeCoroutinesState
in KMP-NativeCoroutines library.
But even when I update a StateFlow, it won’t trigger re rendering in SwiftUI side…
Does anyone can help about it?ken_kentan
04/19/2023, 11:00 AMstruct ContentView: View {
let greet = Greeting().greet()
@StateViewModel var viewModel = HomeViewModel()
var body: some View {
VStack {
Text(viewModel.uiState.text)
Button(
action: {
print(viewModel.uiState)
viewModel.onClick()
print(viewModel.uiState)
}
) {
Text("Button")
}
}
}
}
Log:
HomeUiState(text=5)
onClick: current HomeUiState(text=5)
ken_kentan
04/19/2023, 11:00 AMText(viewModel.uiState.text)
should show 5, but still keep showing initial state (0)Rick Clephas
04/19/2023, 11:01 AMRick Clephas
04/19/2023, 11:02 AMken_kentan
04/19/2023, 11:05 AMclass HomeViewModel: KMMViewModel() {
@NativeCoroutinesState
val uiState = MutableStateFlow(HomeUiState())
init {
viewModelScope.coroutineScope.launch {
while (true) {
delay(1000)
uiState.update {
it.copy(count = it.count + 1)
}
}
}
}
fun onClick(): HomeUiState {
println("onClick: current ${uiState.value}")
uiState.update {
it.copy(count = 0)
}
return uiState.value
}
}
Rick Clephas
04/19/2023, 11:07 AMval uiState = MutableStateFlow(viewModelScope, HomeUiState())
Providing the viewModelScope
to the StateFlow will make sure that any changes are propagated to SwiftUI.Rick Clephas
04/19/2023, 11:08 AMimport com.rickclephas.kmm.viewmodel.MutableStateFlow
ken_kentan
04/19/2023, 11:11 AMRick Clephas
04/19/2023, 11:12 AM