I am remaking the Simon Says game in Kotin. I try to make a good pattern between my viewModel and my view but here i don’t know if there is a better way to execute what i want. So, i need to make my button (light) change color for 700ms when they are clicked. I juste wanted to know if there is a simplest way to do that. My second problem is that if i click on the same button twice when the LaunchedEffect has been launch, i want it to be cancelled an relaunched.
var greenLight by remember { mutableStateOf(false) }
var redLight by remember { mutableStateOf(false) }
var yellowLight by remember { mutableStateOf(false) }
var blueLight by remember { mutableStateOf(false) }
ObserveAsEvents(flow = viewModel.eventChannelFlow) { event ->
when(event) {
GameViewModel.UiEvent.TurnGreenLightOn -> { greenLight = true }
GameViewModel.UiEvent.TurnBlueLightOn -> { redLight = true }
GameViewModel.UiEvent.TurnRedLightOn -> { yellowLight = true }
GameViewModel.UiEvent.TurnYellowLightOn -> { blueLight = true }
}
}
LaunchedEffect(greenLight) {
if (greenLight) {
delay(700)
greenLight = false
}
}
LaunchedEffect(redLight) {
if (redLight) {
delay(700)
redLight = false
}
}
LaunchedEffect(yellowLight) {
if (yellowLight) {
delay(700)
yellowLight = false
}
}
LaunchedEffect(blueLight) {
if (blueLight) {
delay(700)
blueLight = false
}
}