TextFieldState
Jetpack Compose中用于管理文本输入状态的新API,提供同步更新、编辑会话、选择范围、撤销/重做等能力,基于快照系统实现高效UI更新。
时间轴 (近 90 天)
TextFieldState 是 Compose 1.7 起稳定提供的文本输入解决方案,它在用户输入时同步更新,无需等待异步往返,以满足 IME 的同步需求。
TextFieldState 除了只读的文本属性外,还封装了活动编辑会话、选择范围、撤销/重做状态,以及用于格式化文本的 span 样式和段落样式。
TextFieldState 的内部属性由 Compose 快照系统支撑,Composable 在组合、布局或绘制阶段读取状态时会自动订阅更新,从而只触发必要的重组、布局或绘制。
新 API 引入 InputTransformation,在用户输入到达 TextFieldState 之前进行拦截,并提供与 TextFieldBuffer 相同的 API,包括变更列表(change list)能力。
TextFieldState 引用在创建后永不改变,用户输入改变的是其内部属性(如 text 字段),因此 StateFlow 无法感知其内部文本变化,不能依赖 StateFlow 来观察文本。
将 TextFieldState 提升至 ViewModel 时,应将其作为 ViewModel 的直接属性,而不是放入不可变数据类的 UI 状态中,否则 copy 方法会创建新实例并导致选择、光标和历史丢失。
ViewModel 没有 rememberSaveable,因此需要手动为 TextFieldState 配置 Saver 以在进程死亡后恢复状态。
在 Composable 中可调用 rememberTextFieldState 来创建局部 TextFieldState,它还能帮助进程死亡后的状态恢复。
全部知识事实 (8)
TextFieldState 是 Compose 1.7 起稳定提供的文本输入解决方案,它在用户输入时同步更新,无需等待异步往返,以满足 IME 的同步需求。
50%待验证TextFieldState 除了只读的文本属性外,还封装了活动编辑会话、选择范围、撤销/重做状态,以及用于格式化文本的 span 样式和段落样式。
50%待验证TextFieldState 的内部属性由 Compose 快照系统支撑,Composable 在组合、布局或绘制阶段读取状态时会自动订阅更新,从而只触发必要的重组、布局或绘制。
50%待验证新 API 引入 InputTransformation,在用户输入到达 TextFieldState 之前进行拦截,并提供与 TextFieldBuffer 相同的 API,包括变更列表(change list)能力。
50%待验证TextFieldState 引用在创建后永不改变,用户输入改变的是其内部属性(如 text 字段),因此 StateFlow 无法感知其内部文本变化,不能依赖 StateFlow 来观察文本。
50%待验证将 TextFieldState 提升至 ViewModel 时,应将其作为 ViewModel 的直接属性,而不是放入不可变数据类的 UI 状态中,否则 copy 方法会创建新实例并导致选择、光标和历史丢失。
50%待验证ViewModel 没有 rememberSaveable,因此需要手动为 TextFieldState 配置 Saver 以在进程死亡后恢复状态。
50%待验证在 Composable 中可调用 rememberTextFieldState 来创建局部 TextFieldState,它还能帮助进程死亡后的状态恢复。
50%