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

Flutter:使用Sliding Up Panel滑动时如何动态修改AnimatedContainer高度

实现Sliding Up Panel内部容器高度随滑动进度动态调整的方案

核心思路是直接关联面板滑动进度和容器高度的计算逻辑,无需仅在滑动到极值点时修改高度:

  • 首先在页面State中定义两个变量,分别存储当前面板滑动进度和AnimatedContainer的初始固定高度:
// 面板当前滑动进度,0为完全关闭,1为完全展开
double _currentSlideProgress = 0.0;
// 替换为你自己实际使用的容器初始高度
final double _containerInitHeight = 120.0;
  • 在SlidingUpPanel的onPanelSlide回调中实时更新进度变量,注意要调用setState触发UI重绘:
SlidingUpPanel(
  // 其他原有配置保持不变
  onPanelSlide: (position) {
    setState(() {
      _currentSlideProgress = position;
    });
  },
  // ...
)
  • 修改AnimatedContainer的height属性为动态计算值:用初始高度乘以(1 - 滑动进度)即可,进度为0时高度等于初始值,进度为1时高度恰好为0,完全符合需求:
AnimatedContainer(
  // 其他原有属性(颜色、子组件等)保持不变
  duration: Duration.zero,
  height: _containerInitHeight * (1 - _currentSlideProgress),
  // 可选增加边界限制,避免异常场景下高度为负
  // height: (_containerInitHeight * (1 - _currentSlideProgress)).clamp(0, _containerInitHeight),
)

注意这里把AnimatedContainer的动画时长设为0,是因为onPanelSlide回调会随滑动连续触发,进度值本身是平滑变化的,不需要额外的动画过渡,避免出现高度变化滞后于滑动的问题。如果你不需要用到AnimatedContainer的其他动画特性,也可以直接替换为普通Container,效果完全一致。


内容的提问来源于stack exchange,提问作者IBlackVikingl

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 09:57:01