我想用硬编码数据制作简单的 30 天应用程序,但我有代表当天的变量,我想增加它,但当我这样做时,它做得不太正确。
@Composable
fun _30DaysApp() {
var curDay by remember { mutableStateOf(1) }
Scaffold(topBar = {
}) { it ->
LazyColumn(contentPadding = it) {
items(tasks) {
CardTask(task = it, day = curDay)
}
}
}
}
@Composable
fun CardTask(task: Task, day: Int, modifier: Modifier = Modifier) {
var expand by remember { mutableStateOf(false) }
Card(shape = RoundedCornerShape(16.dp)) {
Column(
modifier = modifier
.padding(12.dp)
) {
Row {
Text(text = stringResource(R.string.day, day))
Spacer(modifier = modifier.weight(1f))
ExpandButton(expanded = expand, onClick = { expand = !expand })
}
Text(text = stringResource(task.articleRes))
Spacer(modifier = Modifier.size(8.dp))
Image(
painter = painterResource(task.imageRes), contentDescription = null,
contentScale = ContentScale.Fit
)
}
}
}
尝试将其提升到 CardTask 功能,但仍然无法正常工作。有人可以帮我吗?
我已经在您的代码中发现了问题。当您尝试增加当前日期变量 (
curDay
) 时,它似乎没有正确更新。为了解决这个问题,您可以使用 LaunchedEffect
来观察当天变量的变化并相应地触发更新。您可以通过以下方式修改代码来实现此目的:
@Composable
fun _30DaysApp() {
var curDay by remember { mutableStateOf(1) }
// Use LaunchedEffect to observe changes to curDay and trigger updates
LaunchedEffect(curDay) {
// Any logic to update curDay can be placed here
// For example, incrementing curDay by 1
curDay++
}
Scaffold(topBar = {
}) { it ->
LazyColumn(contentPadding = it) {
items(tasks) {
CardTask(task = it, day = curDay)
}
}
}
}
@Composable
fun CardTask(task: Task, day: Int, modifier: Modifier = Modifier) {
var expand by remember { mutableStateOf(false) }
Card(shape = RoundedCornerShape(16.dp)) {
Column(
modifier = modifier
.padding(12.dp)
) {
Row {
Text(text = stringResource(R.string.day, day))
Spacer(modifier = modifier.weight(1f))
ExpandButton(expanded = expand, onClick = { expand = !expand })
}
Text(text = stringResource(task.articleRes))
Spacer(modifier = Modifier.size(8.dp))
Image(
painter = painterResource(task.imageRes), contentDescription = null,
contentScale = ContentScale.Fit
)
}
}
}
通过使用 LaunchedEffect,curDay 变量每当发生变化时都会更新,确保它正确递增并触发 UI 中的更新。这应该可以解决您当前所面临的未按预期更新的问题。