重复错误时不会出现 Compose Snackbar

Hyz*_*zam 4 android kotlin android-snackbar android-jetpack-compose

我是 jetpack compose 的新手,每当我观察到的错误消息不为空时,我都会尝试显示错误信息栏。

Scaffold(scaffoldState = scaffoldState) {
        LaunchedEffect(errorMessage) {
            if (errorMessage != null) {
                scope.launch {
                    scaffoldState.snackbarHostState.showSnackbar(errorMessage)
                }
            }
        }
        Column(horizontalAlignment = Alignment.CenterHorizontally) {
              //some ui components inside here
        }
    }
Run Code Online (Sandbox Code Playgroud)

上面代码中的问题是,第一次错误消息从 null 更改为特定消息时,它看起来很好。但是,如果重复的用户操作产生相同的错误消息,则不会再次出现。

PS-我知道这是由于将errorMessageas 键放入LaunchedEffect. 我的疑问是,是否有不同的方法来实现我想要的?

ngl*_*ber 6

发生这种情况是因为LaunchedEffect万一errorMessage发生变化,它将再次运行。你能做的是:

LaunchedEffect(errorMessage) {
   if (errorMessage != null) {
        resetErrorMessage() // reset errorMessage
        scope.launch {
            scaffoldState.snackbarHostState.showSnackbar(errorMessage)
        }
   }
}
Run Code Online (Sandbox Code Playgroud)

必须resetErrorMessage将 设为errorMessagenull,以便LaunchedEffect再次运行,但由于您正在检查它是否不为 null,因此什么也不会发生。但一旦收到新的错误消息,就会LaunchedEffect再次执行。