如何为Compose导航的KYC流程实现Hilt作用域的Repository?
KYC流程内存数据管理方案(Kotlin + Jetpack Compose + Hilt)
问题背景
我正在用Kotlin、Jetpack Compose和Hilt构建一款Android应用,其中包含一个由约10个页面组成的KYC流程——该流程拥有独立的导航图,且每个页面都配有专属ViewModel。核心需求如下:
- 在KYC流程中收集用户数据(如身份证信息、地址等),仅在流程进行期间将数据保留在内存中
- 当用户退出KYC流程(如返回首页或个人资料页)时,相关数据需被自动清除
初始方案分析
最初考虑了两种方案,但均不符合需求:
- 方案1:作用域限定为KYC导航图的共享ViewModel
顾虑:每个页面已有独立ViewModel,引入共享ViewModel容易造成逻辑混淆,不符合当前的代码结构设计。 - 方案2:键值存储或本地数据库
顾虑:这类持久化存储方式会导致用户退出KYC流程后,数据仍被保留,违背了"仅流程内存存数据"的核心要求。
核心疑问
我更倾向采用仓库(Repository)方案:让每个页面的ViewModel接收同一个仅在KYC流程期间存在的Repository实例。但存在疑问:
如何通过Hilt实现这个KYC作用域的Repository?怎样为其设置作用域,使其仅在Compose的KYC流程期间存活,并在流程结束后自动清除实例及数据?
最终解决方案
更新:我最终选择使用SavedStateHandle,它满足需求的特性如下:
- 当ViewModel仍处于返回栈中时,数据会被保留;一旦页面条目从返回栈中移除,数据随之清除
- 如果导航配置为在ANR时保留返回栈,还能在应用崩溃时保留用户最后一页提交前的数据
内容的提问来源于stack exchange,提问作者Şahan Şenvar
相关产品推荐
相关产品推荐

