我在应用程序中遇到了 Android Jetpack Compose Snackbar 的问题。我有一个 LazyColumn,其中每一行都是一个 SwipeToDismiss 可组合项。每次滑动时,我都会删除该行并显示一个 Snackbar。但是,如果我非常频繁地滑动行,则会创建一个 Snackbar 队列,并且它们会一一出现。我想修改此行为,以便仅显示最新的 Snackbar,并立即关闭前一个。
val scaffoldState = rememberScaffoldState()
LaunchedEffect(key1 = true) {
viewModel.uiEvent.collect { event ->
when (event) {
is UiEvent.ShowSnackBar -> {
val snackbarResult = scaffoldState.snackbarHostState.showSnackbar(
message = event.message,
actionLabel = event.action
)
when (snackbarResult) {
SnackbarResult.Dismissed -> {}
SnackbarResult.ActionPerformed -> viewModel.onEvent(MessageListEvent.OnUndoDeleteClick)
}
}
else -> Unit
}
}
}
你可以尝试这样的事情:
val uiEvent = viewModel.uiEvent.collectAsStateWithLifecycle()
LaunchedEffect(uiEvent.value) {
when (val event = uiEvent.value) {
is UiEvent.ShowSnackBar -> {
val snackbarResult = scaffoldState.snackbarHostState.showSnackbar(
message = event.message,
actionLabel = event.action
)
when (snackbarResult) {
SnackbarResult.Dismissed -> {}
SnackbarResult.ActionPerformed -> viewModel.onEvent(MessageListEvent.OnUndoDeleteClick)
}
}
else -> Unit
}
}