我试图理解为什么我的 SnackBar 没有第二次显示,我正在从我的可组合项传播 snackbar 消息和错误布尔值,我正在获取这些数据并发出一个 snackbar 但它第一次工作而不是第二次即使我将消息设置为空,也有相同消息的时间。
当我进入我的注册屏幕时,如果电子邮件已经存在于数据库中,我会发出一条错误消息,然后如果我再次触发相同的消息,什么也没有发生,小吃店也没有出现,有什么想法吗?
setContent {
var snackBarMessage: String? by remember { mutableStateOf(null) }
var isError by remember { mutableStateOf(false) }
val snackbarHostState = remember { SnackbarHostState() }
CryptoTheme {
Scaffold(
scaffoldState = scaffoldState,
snackbarHost = {
SnackbarHost(hostState = snackbarHostState) { data ->
Snackbar(
snackbarData = data,
backgroundColor = if (!isError) GreenProfit else Color.Red,
contentColor = Color.White
)
}
},
bottomBar = { BottomBarNavigation(navController = navController) },
backgroundColor = Color.Black
) {
NavigationGraph(
modifier = Modifier.padding(bottom = it.calculateBottomPadding()),
navController = navController,
showSnackBarMessage = { message, showError ->
isError = showError
snackBarMessage = message
}
)
LaunchedEffect(key1 = snackBarMessage) {
if (snackBarMessage != null) {
snackbarHostState.showSnackbar(
message = snackBarMessage ?: ""
)
snackBarMessage = null
}
}
}
}
}
在 NavigationGraph 内部,我有多个可组合项重用这种将消息和错误传播到脚手架以显示小吃店的方式
NavigationGraph(showSnackBarMessage: (message: String, isError: Boolean)) {
Navhost(...) {
composable(route) {
RegisterComposable(showSnackBarMessage)
}
}
来自可组合的
RegisterComposable(showSnackBarMessage: (message: String, isError: Boolean)){
when(uiState.signUpError) {
showSnackBarMessage("E-mail already in use", true)
}