Android Jetpack Compose Snackbar:如何在触发新的 Snackbar 时立即关闭上一个 Snackbar?

问题描述 投票:0回答:1

我在应用程序中遇到了 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
           }
       }
   }

android-jetpack-compose kotlin-coroutines android-snackbar
1个回答
0
投票

你可以尝试这样的事情:

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
    }
}

© www.soinside.com 2019 - 2024. All rights reserved.