我正在使用 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()
}
}
我遇到了同样的问题。根据这篇文章,在更新可组合函数的输入时会触发重组。
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()
}
}
}