我正在使用 RoomDataBase 创建一个 Todo 应用程序。我想在主屏幕上有一个下拉菜单来选择要显示的类别。类别列表默认有全部、个人、购物、心愿单和工作。从数据库中获取所有待办事项的函数名为 getTodos 并以 Flow 类型加载数据。在 TodoListScreen 中,数据由 collectAsState 从 viewModel 中检索为状态。应用程序启动时的第一个类别设置为“全部”,并且可以正常工作。如果我尝试将类别更改为购物,列表会正确更新。但是在第二次尝试时,当我尝试选择另一个类别时,列表不会更新。存储库中的数据获取函数如下:
override fun getTodos(category: String): Flow<List<Todo>> {
return dao.getTodos(category)
}
这是在viewModel中:
var todos: Flow<List<Todo>>
我记录了 viewModel 中的 Flow 详细信息和 TodoListScreen 中的 todos。我发现在类别更改时,流程会更新,但 collectAsState 不会更新 TodoListScreen 中的待办事项。
这是在 TodoListScreen
var todos = viewModel.todos.collectAsState(initial = emptyList())
这是我的 lazyColumn
LazyColumn(
modifier = Modifier.fillMaxSize()
) {
items(todos.value) {todo ->
TodoItem(
todo = todo,
onEvent = viewModel::onEvent,
modifier = Modifier
.fillMaxWidth()
.clickable {
viewModel.onEvent(TodoListEvent.OnTodoClick(todo))
Log.d(TAG, "injas1 ${todos.value}")
}
.padding(16.dp)
)
}
}