BottomSheetState的targetValue属性移除后,旧代码如何迁移?
BottomSheetState.targetValue 属性移除原因及代码迁移方案
一、属性移除原因
Compose Material库在后续版本迭代中移除了targetValue属性,核心原因是优化底部弹窗的状态管理逻辑:原targetValue+currentValue的模式容易出现状态不同步的问题,官方改用progress属性统一处理静态状态与过渡动画状态,让状态追踪更简洁可靠。
二、代码迁移方案
现在可以通过BottomSheetState.progress获取动画的起始状态(from)、目标状态(to)以及过渡进度(fraction),替代原有逻辑:
迁移后的代码
// 若使用Material 3,需将@ExperimentalMaterialApi替换为@ExperimentalMaterial3Api @ExperimentalMaterialApi val BottomSheetScaffoldState.currentSheetFraction: Float get() { val progress = bottomSheetState.progress val fromState = progress.from val toState = progress.to val fraction = progress.fraction return when { fromState == Collapsed && toState == Collapsed -> 1f fromState == Expanded && toState == Expanded -> 0f fromState == Collapsed && toState == Expanded -> 1f - fraction fromState == Expanded && toState == Collapsed -> fraction else -> fraction } }
逻辑说明
- 当底部弹窗无动画时,
from与to状态一致,对应原代码中currentValue和targetValue相等的分支; - 过渡动画状态下,
from是起始状态、to是目标状态,逻辑与原代码的currentValue、targetValue对应关系完全匹配; - 注意根据使用的Material版本调整实验性注解,确保
Collapsed、Expanded为对应版本的BottomSheetValue枚举值。
内容的提问来源于stack exchange,提问作者Stefan
相关产品推荐
相关产品推荐

