【问题标题】:How can I call jetpack compose function in Observable live data function?如何在 Observable 实时数据函数中调用 jetpack compose 函数?
【发布时间】:2021-09-10 01:54:00
【问题描述】:

您好,我尝试将其称为 updatedata(it) 的 compose 函数

 viewModel.ResponseStatus.observe(viewLifecycleOwner) { status ->
                when (status) {
                    FragmentViewModel.PROCESSING,
                    FragmentViewModel.NOT_PROCESSING -> {
                        viewModel.object.let {
                            updatedata(it). <--- error?
                        } ?: faildialog()
                    }

这就是我的updatadata() 的功能

    @ExperimentalFoundationApi
    @OptIn(ExperimentalAnimationApi::class)
    @ExperimentalUnitApi
    @Composable
private fun updatedata(authdata: Payload) {
   composefunction(authdata.client_name)
}

我得到的错误是@Composable invocations can only happen from the context of a @Composable function

这就是我调用的 compose 函数

 @ExperimentalUnitApi
    @ExperimentalAnimationApi
    @ExperimentalAnimationGraphicsApi
    @ExperimentalFoundationApi
    @Composable
    fun composefunction(name: String) {
      Box(){}
}

我不熟悉流或实时数据,更不用说可组合了,我必须更改哪个部分才能让实时数据传递到 compose 函数?

【问题讨论】:

标签: android kotlin android-livedata android-jetpack-compose android-jetpack


【解决方案1】:

在 Composable 世界中,您无需告诉视图在状态更改后要做什么。

@ExperimentalFoundationApi
@OptIn(ExperimentalAnimationApi::class)
@ExperimentalUnitApi
@Composable
private fun updatedata(viewModel: YourViewModel, authdata: Payload) {
   val responseState by viewModel.ResponseStatus.observeAsState()
    when (status) {
       FragmentViewModel.PROCESSING,
       FragmentViewModel.NOT_PROCESSING -> {
             viewModel.object.let {
                 composefunction(authdata.client_name)
             } ?: faildialog()
       }
    }
}

我强烈建议你学习你刚才提到的所有东西:LiveData、MutableState 以及如何在 Composable 中思考这些东西协同工作。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-01-31
    • 1970-01-01
    • 1970-01-01
    • 2022-11-27
    • 2019-12-27
    • 1970-01-01
    • 2021-07-09
    相关资源
    最近更新 更多