MotionLayout 重组问题与状态

问题描述 投票:0回答:1

我正在使用 MotionLayout,并且我有一个可以为 null 的状态。 我需要根据这种状态显示不同的可组合项。但是,我注意到状态不会触发我的 MotionLayout 的重组,我确信我的状态已经改变。 我该如何调整?

代码:


val userVo by LoginService.userVo.collectAsStateWithLifecycle()

    MotionLayout(
        modifier = Modifier
            .fillMaxSize(),
        motionScene = MotionScene(content = motionJson),
        progress = toolbarState.progress
    ){
        if(userVo != null){
            ComposableA()
        }else{
            ComposableB()
        }
    }
android android-jetpack-compose android-jetpack
1个回答
1
投票

我遇到了同样的问题。根据这篇文章,在更新可组合函数的输入时会触发重组。

userVo
的更新会触发
content
MotionLayout
可组合函数内部的重组。但是,由于错误,
MotionLayout
中没有发生重组。这可能就是为什么
MotionLayout
仍然标记为
@ExperimentalMotionApi

我对这个问题的解决方法是使用

key
函数强制重新组合
MotionLayout
:

key(userVo) {
    MotionLayout(
        modifier = Modifier.fillMaxSize(),
        motionScene = MotionScene(content = motionJson),
        progress = toolbarState.progress
    ) {
        if (userVo != null) {
            ComposableA()
        } else {
            ComposableB()
        }
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.