在 Jetpack Compose 中导航回屏幕时更新状态的最佳方式是什么?
What is the best way of updating a state when navigating back to a screen in jetpack compose?
我有两个屏幕:第一个是待办事项列表,第二个是用于添加待办事项的屏幕,我可以使用 navController 从一个屏幕导航到另一个屏幕。当我在第二个屏幕上添加一个新的待办事项时,数据库中的数据发生变化,我 return 到带有待办事项列表的屏幕,但它不包含新的,因为函数 viewModel.getAllTodos() 不是执行。在添加新的待办事项后,我应该在何时何地执行它以查看 return 更新后的列表?
最好的方法是将这些 TODO 存储在 Room 数据库中,以便您可以观察到更改。
DAO:
@Query("SELECT * FROM todos")
fun getAllTodos(): Flow<List<Todo>>
然后,在您的 TODO 列表屏幕中,只需使用 getAllTodos().collectAsState(emptyList())
。为了从 DAO 访问此方法,我建议使用 Hilt 将包含抽象方法的存储库注入 ViewModel。
我有两个屏幕:第一个是待办事项列表,第二个是用于添加待办事项的屏幕,我可以使用 navController 从一个屏幕导航到另一个屏幕。当我在第二个屏幕上添加一个新的待办事项时,数据库中的数据发生变化,我 return 到带有待办事项列表的屏幕,但它不包含新的,因为函数 viewModel.getAllTodos() 不是执行。在添加新的待办事项后,我应该在何时何地执行它以查看 return 更新后的列表?
最好的方法是将这些 TODO 存储在 Room 数据库中,以便您可以观察到更改。
DAO:
@Query("SELECT * FROM todos")
fun getAllTodos(): Flow<List<Todo>>
然后,在您的 TODO 列表屏幕中,只需使用 getAllTodos().collectAsState(emptyList())
。为了从 DAO 访问此方法,我建议使用 Hilt 将包含抽象方法的存储库注入 ViewModel。