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
相关产品推荐
相关产品推荐

