第一次使用 ViewModel,所以有点迷失。我已经像这样定义了我的视图模型:
data class Task(
val id: String,
val title: String,
val description: String,
val isCompleted: Boolean
)
class TaskViewModel : ViewModel() {
// A list to hold our tasks
var taskList = mutableStateOf(
listOf(
Task("First", "Complete homework", "Finish math and science assignments", false),
Task("Second", "Go for a run", "Run for 30 minutes in the park", false),
Task("Third", "Read a book", "Start reading 'The Adventures of Sherlock Holmes'", false)
// Add more tasks as needed
)
)
然后尝试在惰性列中调用它,以便它显示我的 ViewModel 中的所有项目,但错误“类型不匹配”推断类型是 MutableState 但需要 Int”
fun OverviewScreen(
navController: NavHostController,
viewModel : TaskViewModel = viewModel()
) {
// val viewModel = TaskViewModel.viewModel
val viewModel: TaskViewModel = viewModel()
LazyColumn {
items(viewModel.taskList) { task ->
// Display each task in your list
Text("Task: ${task}")
}
}
不知道如何解决它,有什么想法吗?
因此,
items
中的 LazyColumn
可以接受 Int (重复可组合项的次数)或项目列表(为列表中的每个项目重复可组合项),但是您传递的是MutableStateitems
不知道如何从中获取数据,这里有多种解决方案:
解决方案 1. 使用
.value
将从 MutableState 中获取列表
items(viewModel1.taskList.value) { task ->
// Display each task in your list
Text("Task: ${task}")
}
解决方案 2. 在视图模型中使用
by
允许所有引用获取值而不是 mutableState
import androidx.compose.runtime.getValue
import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.setValue
import androidx.lifecycle.ViewModel
data class Task(
val id: String,
val title: String,
val description: String,
val isCompleted: Boolean
)
class TaskViewModel : ViewModel() {
// A list to hold our tasks
var taskList by mutableStateOf(
listOf(
Task("First", "Complete homework", "Finish math and science assignments", false),
Task("Second", "Go for a run", "Run for 30 minutes in the park", false),
Task("Third", "Read a book", "Start reading 'The Adventures of Sherlock Holmes'", false)
// Add more tasks as needed
)
)
}
LazyColumn {
items(viewModel1.taskList) { task ->
// Display each task in your list
Text("Task: ${task}")
}
}