求助:Android Jetpack Compose Material3中获取BottomSheet进度失败
Compose Material3中获取BottomSheet滑动进度的解决方法
在Compose Material2(如androidx.compose.material:material:1.4.3)中,可通过rememberBottomSheetScaffoldState().bottomSheetState.progress直接获取BottomSheet滑动进度,但Material3(如androidx.compose.material3:material3:1.2.0-alpha03)移除了该属性,需通过以下方式解决:
核心实现方案
Material3的BottomSheetState提供了calculateProgress方法,用于计算两个状态间的滑动进度,具体步骤如下:
- 获取BottomSheetState实例
val bottomSheetState = rememberBottomSheetState(skipHiddenState = false) val scaffoldState = rememberBottomSheetScaffoldState(bottomSheetState = bottomSheetState)
- 计算滑动进度
指定起始状态(from)和目标状态(to),调用方法获取0f-1f区间的进度值:
val progress = bottomSheetState.calculateProgress( from = BottomSheetValue.Collapsed, to = BottomSheetValue.Expanded )
- 实时监听进度变化
结合snapshotFlow和collect实现进度的实时监听:
LaunchedEffect(bottomSheetState) { snapshotFlow { bottomSheetState.calculateProgress( from = BottomSheetValue.Collapsed, to = BottomSheetValue.Expanded ) }.collect { currentProgress -> // 在此处理进度变化逻辑,比如更新关联UI状态 } }
补充说明
calculateProgress返回值范围为0f(对应from状态)到1f(对应to状态)- 若BottomSheet包含
HalfExpanded等中间状态,可调整from和to参数计算对应区间的进度
内容的提问来源于stack exchange,提问作者Pavan
相关产品推荐
相关产品推荐

