You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Compose中AnimatedVisibility退出动画因文本为null失效的解决求助

Compose AnimatedVisibility退出动画失效修复

当text变为null时,AnimatedVisibility触发退出动画,但此时text?.let会跳过Text组件渲染,导致动画期间无内容可显示,看起来退出动画没生效。核心问题是退出动画执行时,依赖的text已经是null,没有可动画的元素。

解决方案:保存最后有效文本值

通过保存最后一次非null的文本值,确保退出动画过程中Text组件始终有内容渲染,让动画正常完成。

修改后的代码

@Composable
fun ShowAnimatedText(
    text: String?
) {
    // 存储最后一次非null的文本,初始值用空字符串兜底
    val lastValidText = remember { mutableStateOf(text ?: "") }

    // 当text不为null时,更新存储的有效文本
    LaunchedEffect(text) {
        text?.run {
            lastValidText.value = this
        }
    }

    Column(modifier = Modifier.fillMaxWidth()) {
        AnimatedVisibility(
            visible = text != null,
            enter = fadeIn(animationSpec = tween(2000)),
            exit = fadeOut(animationSpec = tween(2000))
        ) {
            // 始终使用存储的最后有效文本,保证退出动画期间有内容
            Text(text = lastValidText.value)
        }
    }
}

关键细节

  • remember确保lastValidText在组件重组时保留状态,不会被重置。
  • LaunchedEffect(text)监听text的变化,只要text不为null就更新存储值,保证显示的是最新内容。
  • 移除text?.let的判断,直接用存储的文本渲染Text,这样即使当前text是null,退出动画期间依然有文本可以执行淡出动效。

内容的提问来源于stack exchange,提问作者AphonicLoqui

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.11 23:06:09