提问人:Sravan 提问时间:11/10/2023 更新时间:11/10/2023 访问量:50
与 Api 响应一起使用时的警报对话框问题
Alert dialog issue when used with Api response
问:
我是 Jetpack compose 的新手,当我的 API 调用响应出错时,我尝试显示警报对话框,所以我使用 FLOW 进行数据更新。在可组合函数中观察响应对象时,在错误条件下,我将此值设置为“true”并显示对话框。但我不能驳回它。我敢肯定这不是正确的方法,因为 showDialog 会被重组并始终将值设置为“true”。
var showDialog by remember { mutableStateOf(false) }
is NetworkResult.Error -> {
errorMessage = (loginResponse as NetworkResult.Error).message!!
showDialog = true
if (showDialog){
AlertDialog(message = errorMessage, onDismiss = { showDialog = false }) {
showDialog = false
}
}
有人可以指导我处理这个问题的正确方法吗?
我尝试使用LaunchedEffect,但我得到了以下内容。
@Composable invocations can only happen from the context of a @Composable function
答:
0赞
Abdul Muqeet
11/10/2023
#1
每次可组合重构。它会返回到您设置的响应,这会导致对话框一次又一次地重新打开。Error State
showDialog = true
一种解决方案是,当代码达到某种状态时,将 .因此,当可组合重构时。它不会执行代码。NetworkResult
networkState = null
NetworkResult.Error
代码如下所示
if(networkState == null){
return
}
when(networkState){
is NetworkResult.Error -> {
// error state
}
is NetworkResult.Success -> {
// success state
}
}
networkState = null
networkState
应在 中声明。因此,不会因重组而改变或重置。ViewModel
networkState
评论