为什么 collectAsState 只工作一次?

问题描述 投票:0回答:0

我正在使用 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)
                )
            }
        }
state flow jetpack-compose
© www.soinside.com 2019 - 2024. All rights reserved.