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. 我的疑问是,是否有不同的方法来实现我想要的?
发生这种情况是因为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再次执行。
| 归档时间: |
|
| 查看次数: |
1634 次 |
| 最近记录: |