При тестировании приложения я понял, что если пользователь несколько раз быстро нажмет FloatingActionButton, обратный вызов onClick может быть запущен несколько раз. В моем случае это привело к тому, что обратный стек извлекался несколько раз, поскольку обратный вызов onPopBackStack поднимается до NavHost, где он имеет доступ к navController, и вызывает метод popBackStack. .
Код: Выделить всё
fun AddEditTodoScreen(onPopBackStack: () -> Unit, viewModel: AddEditTodoViewModel = viewModel()) {
var isNavigating by remember{
mutableStateOf(false)
}
LaunchedEffect(key1 = true){
viewModel.uiEvent.collect{event : UiEvent ->
when(event){
is UiEvent.PopBackStack -> onPopBackStack
else -> Unit
}
}
}
Scaffold(floatingActionButton = {
FloatingActionButton(onClick = {
if(!isNavigating){
isNavigating = !isNavigating
onPopBackStack()
}
}) {
Icon(imageVector = Icons.Default.Check, contentDescription = "Check")
}
В настоящее время я просто устанавливаю для isNavigating значение true при первом нажатии кнопки FloatingActionButton, а при повторном нажатии проверяется, установлен ли флаг isNavigating установлено значение true, если это так, то он ничего не делает. Какой способ решения этой проблемы был бы лучше, если таковой имеется?
Подробнее здесь:
https://stackoverflow.com/questions/763 ... ck-compose