Jetpack Compose:如何跨页面更新所有列表中的元素?
跨页面Post数据同步实现思路(Apollo GraphQL + MVVM + Clean架构)
- Apollo缓存主动更新
在页面1执行Post更新的GraphQL mutation时,通过Apollo的update配置手动更新本地缓存中目标ID的Post数据。由于Apollo缓存是全局共享的,页面2的列表查询如果基于缓存,会自动感知到数据变化并触发UI更新。 - 全局事件驱动刷新
在Clean架构的Domain层实现一个全局事件发布器(如Flow、LiveData),当页面1完成Post更新并同步到数据库后,发布携带目标Post ID的更新事件。页面2的ViewModel订阅该事件,收到通知后从数据库或Apollo缓存拉取最新数据,更新本地列表状态。 - 结合页面生命周期与saveState适配
因Navigation设置了saveState = true,页面2的ViewModel不会重复初始化,可在页面恢复可见性(如onResume)时,结合上述事件通知触发数据校验;或直接使用Apollo的watch方法监听列表查询,缓存更新时自动获取新数据并同步UI。 - Clean架构职责落地
- Data层:处理Apollo缓存更新、数据库同步逻辑,同时提供缓存变化的监听能力。
- Domain层:封装事件发布逻辑,仅传递必要的更新标识(如Post ID),避免耦合UI细节。
- Presentation层:ViewModel订阅事件或缓存变化,更新UI状态;页面仅负责观察ViewModel状态并刷新列表。
内容的提问来源于stack exchange,提问作者HavanaSun
相关产品推荐
相关产品推荐

