与 Api 响应一起使用时的警报对话框问题

Alert dialog issue when used with Api response

提问人:Sravan 提问时间:11/10/2023 更新时间:11/10/2023 访问量:50

问:

我是 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
安卓 android-jetpack-compose kotlin-flow

评论

0赞 F.Mysir 11/10/2023
如果你能写出这个类的所有代码,我可以帮你。

答:

0赞 Abdul Muqeet 11/10/2023 #1

每次可组合重构。它会返回到您设置的响应,这会导致对话框一次又一次地重新打开。Error StateshowDialog = true

一种解决方案是,当代码达到某种状态时,将 .因此,当可组合重构时。它不会执行代码。NetworkResultnetworkState = nullNetworkResult.Error

代码如下所示

  if(networkState == null){
     return
  }
  when(networkState){
      is NetworkResult.Error -> {
         // error state
      }
      is NetworkResult.Success -> {
        // success state
      }
  }
  networkState = null

networkState应在 中声明。因此,不会因重组而改变或重置。ViewModelnetworkState