在测试我的应用程序时,我意识到,如果用户快速多次按下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")
}
目前,我只是在第一次单击FloatingActionButton
时将isNavigating
设置为True,如果再次单击,它将判断isNavigating
标志是否设置为True,如果设置为True,则不执行任何操作.如果有更好的办法来解决这个问题,还有什么办法?