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

h6my8fg2  于 2023-11-15  发布在  Android
关注(0)|答案(1)|浏览(130)

我是Jetpack compose的新手,当我的API调用响应出错时,我试图显示一个警报对话框,所以我使用FLOW进行数据更新。当观察我的可组合函数中的响应对象时,在错误条件下,我将此值设置为“true”并显示对话框。但我不能关闭它。我确信这不是正确的方法,因为showDialog会重新组合并设置值永远是“真”。

var showDialog by remember { mutableStateOf(false) }

个字符
有人能告诉我一个正确的处理方法吗?
我试过使用LaunchedEffect,但我得到了下面的结果。

@Composable invocations can only happen from the context of a @Composable function

zazmityj

zazmityj1#

每次可组合的重新组合。它返回到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不会因重组而改变或重置。

相关问题