Jetpack Compose TextField如何延迟提交到Firebase直到点击ImeAction.Done
解决方案
核心思路是通过remember的key参数绑定远端数据的更新标识,实现「远端数据更新时自动覆盖本地临时状态,编辑时本地状态正常独立更新」的效果。
修正后调用侧代码
// 将firebaseDataClass的displayName作为remember的依赖key var tempDisplayName by remember(firebaseDataClass?.displayName) { mutableStateOf(firebaseDataClass?.displayName ?: "") } HoistDisplayName( display = tempDisplayName, onUpdate = { tempDisplayName = it }, onDone = { firebaseDataClass?.displayName = tempDisplayName updateDatabase(firebaseDataClass) } )
适配逻辑说明
- 满足Firebase远端数据同步需求:只要Firebase侧拉取到新的displayName值、或是切换数据路径导致displayName变更,
remember的依赖key就会变化,自动重新初始化tempDisplayName为最新的远端值,TextField同步显示最新数据,直接覆盖本地之前的临时编辑内容。 - 满足用户编辑回显需求:tempDisplayName是本地独立的MutableState变量,用户输入过程中只会更新这个本地状态,TextField实时回显输入内容,不会被远端数据中途干扰,只有点击ImeAction.Done按钮时才会将本地编辑的内容提交到Firebase数据库。
内容的提问来源于stack exchange,提问作者Angel Koh
相关产品推荐
相关产品推荐

