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
相关产品推荐
相关产品推荐

