Jetpack Compose横竖屏切换时Material颜色丢失问题求助
问题根因
横竖屏切换颜色丢失的核心问题出在NoteCard可组合项中对noteColor的状态存储逻辑不合理:
noteColor完全由入参getNoteColorFromIndex决定,没有任何本地修改逻辑,不需要用remember + mutableStateOf存储,属于多余的状态声明- 就算保留remember写法,你没有把
getNoteColorFromIndex作为remember的依赖key,配置变更(横竖屏切换)触发重组时,不会重新根据最新的入参计算颜色值,导致取到错误值,视觉上表现为颜色丢失。
修复方案
两种修复方式选一种即可,推荐第一种:
方案1(最优):直接移除多余的状态声明
删掉val noteColor by remember{mutableStateOf(noteColors[getNoteColorFromIndex])}这行,调用NoteCardView时直接传入计算后的颜色参数即可。
修改后的核心代码:
@Composable fun NoteCard( modifier:Modifier = Modifier, noteTitle:String, noteContent:String, getNoteColorFromIndex:Int, currentNoteIndex:Int, ) { var noteState by remember{ mutableStateOf(NoteState.Collapsed)} val transition = updateTransition(targetState = noteState,label = "Expanded State") val arrowRotate by transition.animateFloat( label = "Arrow Rotation" ) { state -> when(state){ NoteState.Collapsed -> 0f NoteState.Expanded -> 180f } } NoteCardView( noteTitle, noteContent, noteColors[getNoteColorFromIndex], // 直接计算传入颜色 currentNoteIndex, noteState, arrowRotate, modifier ){ noteState = when(noteState){ NoteState.Collapsed -> NoteState.Expanded NoteState.Expanded -> NoteState.Collapsed } } }
方案2:给remember添加依赖key
如果后续需要做本地修改颜色的逻辑,要保留noteColor的状态声明,只需要给remember加上getNoteColorFromIndex作为依赖key,参数变化或配置变更触发重组时会自动重新计算颜色值:
val noteColor by remember(getNoteColorFromIndex) { mutableStateOf(noteColors[getNoteColorFromIndex]) }
内容的提问来源于stack exchange,提问作者Zohaib Ahmed
相关产品推荐
相关产品推荐

