在使用.serveAsState()时,如何在更改MuableLiveData的值后开始执行代码块?

示例:MuableLiveData更改,并且After需要调用Toast.

此代码返回错误"Inline Fun的计算参数内不允许可组合的调用"记住(计算:()->TypeVariable(T)):TypeVariable(T)»

@Composable
fun TextInfo() {
    val isSuccess by remember { viewModel.isSuccess.observeAsState() }//var isSuccess = MutableLiveData<Boolean>() — in ViewModel

    LaunchedEffect(isSuccess) {
        Log.d("IS SUCCESS", "trues")
    }
}

推荐答案

remember{…}内部的块不是可组合作用域,当您try 将@Composable函数放入lambda块或其他不是可组合的函数时,会遇到类似的问题.

我也认为你不再需要remember{…}美元了,因为你的ViewModel已经处理过了

val isSuccess by viewModel.isSuccess.observeAsState()

LaunchedEffect(isSuccess) {
     if (isSuccess) {
         Log.d("IS SUCCESS", "trues")
     }     
}

我对你的代码做了一些try ,把它改成这样,

val isSuccess by viewModel.isSuccess.observeAsState()

Button(onClick = { viewModel.updateSuccess() }) {}
            
LaunchedEffect(isSuccess) {
    if (isSuccess) {
        Log.e("IS_SUCCESS", "IS_SUCCESS? $isSuccess")
    }
    
}

在你的ViewModel美元中

fun updateSuccess() {
   isSuccess.value = isSuccess.value?.not()
}

每次点击按钮时,它都会打印出来

29568-29568 E/IS_SUCCESS: IS_SUCCESS? true
29568-29568 E/IS_SUCCESS: IS_SUCCESS? true

Android相关问答推荐

在Android应用程序上使用Room数据库时,是否可以预先填充数据

懒惰列的滚动到项目不按预期工作'

滚动屏幕时更改按钮外观

如何处理穿戴构图上的长点击事件?

Jetpack Compose和Android Studio中的普通设计工具有什么不同?

格雷德的两个星号是什么意思?非路径

如何更新Kotlin中的显示?

穿戴与iPhone连接的安卓操作系统

如何隐藏OutlinedTextField边框上的提示标签

弹出导航堆栈后,Compose 无法访问 Hilt View Model

我可以从 Android 中的选定文本中获取周围的文本吗?

我如何比较多个时间范围并在 Android Compose 中并排显示它们

如何仅使用您的 Android 应用程序定位平板电脑?

围绕动态大小的内容包装 Jetpack Compose Row?

以下代码如何在 Android 上运行

为什么我要使用 $version 而不是2.7.0?

从活动共享视图模型以使用 hilt 组合函数

您如何衡量条形图的 4 个类别?

Android YouTube SDK - 视频无法在某些 Android 设备中播放

Android:在模块 jetified-play-services-measurement 和 jetified-play-services-measurement-impl 中发现重复类