You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.17 18:12:50