Elva Scroll View,一个适用于嵌套滚动的 Flutter 包,具备多层级协同滚动和多层级惯性滚动动画传递功能。
一、效果与功能
1.1 效果演示
1.2 支持的功能
- 嵌套滚动支持:支持多级嵌套滚动视图,实现平滑的滚动协调
- 惯性滚动传递:惯性滚动动画可以在多个滚动组件之间传递
- Shell 模式:支持阻止滚动偏移继续向上传播,实现独立的滚动区域
- 灵活的 Builder 模式:使用 Builder 模式,易于集成到现有代码中
- 自定义通知系统:提供丰富的滚动事件通知
二、使用
2.1 安装
在项目的 pubspec.yaml 文件中添加:
dependencies:
elva_scroll_view: ...
2.2 基础用法
ElvaScrollViewBuilder 是一个构建组件,用于包装需要协调滚动的 CustomScrollView。使用ElvaScrollViewBuilder包裹你需要协调滚动的 CustomScrollView或者其他滚动组件,即可实现滚动协调功能:
ElvaScrollViewBuilder(
builder: (context, controller) {
return CustomScrollView(
controller: controller,
slivers: [
SliverAppBar(...),
SliverList(...),
],
);
}
)
2.3 Shell 参数
Shell参数会中止滚动偏移继续向上传播,实现独立的滚动区域。
ElvaScrollViewBuilder(
isShell: true,
builder: (context, controller) {
return CustomScrollView(
controller: controller,
slivers: [...]
);
}
)
三、核心 API
3.1 ElvaScrollViewBuilder
主要的构建组件,用于包装需要协调滚动的 CustomScrollView。
参数:
builder: 构建函数,接收 context 和 controllerdebugLabel: 用于日志记录的调试标签isShell: 是否为 shell 组件。当为 true 时,滚动偏移不会继续向上传播
3.2 ElvaScrollViewScrollController
自定义滚动控制器,实现了 TransportPixelNode mixin,负责处理滚动协调和传递。
3.3 ElvaScrollViewPosition
自定义滚动位置管理器,继承自 Flutter 原生的 ScrollPositionWithSingleContext,实现:
- 用户拖拽偏移处理
- 惯性滚动启动和管理
- 动画偏移应用
3.4 ElvaScrollViewAnimationOverscrollDispatcher
惯性滚动动画分发器,负责:
- 收集需要接受滚动事件的组件
- 按顺序分发惯性滚动动画
- 管理过滚动传递
3.5 ElvaScrollViewAnimationScrollingNotification
当全局过滚动事件动画发生时分发。
属性:
overscroll: 过滚动量consumed: 当前滚动视图消耗的量
四、原理剖析
- [Flutter] infinity与可滚动布局
- [Flutter] ScrollActivity与ScrollActivityDelegate
- [Flutter] 多层级嵌套滚动
- [Flutter] 嵌套滚动与弹性嵌套滚动
五、其他:
顺便求个⭐️~