Kotlin更新数据要使用remember
Kotlin Compose Todo小项目 删除添加项目 ,认识状态提升_安果移不动的博客-CSDN博客
接着上面的项目
这里如果是直接使用
randomTint()
那么每次操作数据你会发现都会刷新alpha数据 这并不是我们想要的
正确做法是加上remember{}
@Composable
fun TodoRow(todo: TodoItem, modifier: Modifier = Modifier, onItemClick: (TodoItem) -> Unit) {
Row(
modifier = modifier
.padding(horizontal = 16.dp, vertical = 8.dp)
.clickable { onItemClick(todo) },
//子元素水平均匀分发
horizontalArrangement = Arrangement.SpaceBetween
) {
Text(todo.task)
val iconAlpha = remember() {
randomTint()
}
Icon(
imageVector = todo.icon.imageVector,
tint = LocalContentColor.current.copy(alpha = iconAlpha),
contentDescription = stringResource(id = todo.icon.contentDescription)
)
}
}
private fun randomTint(): Float {
val number = Random.nextFloat().coerceIn(0.3f, 0.9f)
return number
}
但是有时候会数据错乱在一起 为了区分 可以在remember添加唯一标志符
val iconAlpha = remember(todo.id) {
randomTint()
}
这样 当数据发生变化 会去重绘和
iconAlpha
有关的组件。