scrollDirection
属性
- Scrollable 组件的公共参数
- 表示滚动方向,默认值 Axis.vertical
physics
属性
-
Scrollable 组件的公共参数
-
此属性接受一个 ScrollPhysics 类型的对象,它决定可滚动组件如何响应用户操作。
默认情况下 Flutter 会根据平台分别使用如下两种效果。
- ClampingScrollPhysics : Android 下的微光效果。
- BouncingScrollPhysics : iOS 下弹性效果。
controller
属性
- Scrollable 组件的公共参数
- 此属性默认接受一个 ScrollController 对象。 ScrollController 的主要作用是控制滚动位置和监听股东事件。
默认情况下,Widget树中会有一个默认的 PrimaryScrollController,如果子树中可滚动组件没有显式的指定
controller,并且 primary 属性值为 true 时(默认就是 true),可滚动组件会使用这个默认的
PrimaryScrollController。这种机制带来的好处是父组件可以控制子树中可滚动组件的滚动行为。
例如, Scaffold 正是使用这种机制在 iOS 中实现了点击导航栏回到顶部的功能。
itemExtent
属性
如果该参数不为 null,则会强制 children 在滚动长度方向为 itemExtent。
如果为空,则有优先让 children 来决定滚动方向的长度。
所以设置 itemExtent 是一种提高 ListView 性能的好办法之一。
shrinkWrap
属性
- 该属性表示是否根据子组件的总长度来设置 ListView 的长度,默认值为 false。
默认情况下,ListView 会在滚动方向尽可能多的占用空间。 - 当开启 shrinkWrap 模式,ListView 性能将会显著降低。
因为无论何时滚动位置改变时,ListView 的 size 就要被重新计算。
itemCount
属性
列表项的数量,如果为 null,则为无限列表。
itemBuilder
属性
- 它是列表项的构建器,类型为 IndexedWidgetBuilder,返回值为一个 widget。
当列表滚动到具体的 index 位置时,会调用该构建器来构建列表项。 - 可滚动组件的构造函数如果需要一个列表项 Builder,那么通过该构造函数的可滚动组件
通常就是支持基于 Sliver 的懒加载模型的,反之则不支持,这是个一般规律。
相关知识点一:ViewPort 视口
在很多布局系统中都有 ViewPort 的概念,在 Flutter 中,术语 ViewPort(视口),如无特殊说明,则是指一个 Widget 的实际显示区域。
例如,一个 ListView 的显示区域高度是 800 像素,虽然其列表项总高度可能远远超过 900 像素,但是其 ViewPort 仍然是 800 像素
相关知识点二:基于 Sliver 的延迟构建
通常情况下滚动组件的可能有非常多的子组件,如果一下子把所有子组件全部构建出来将会非常昂贵。
为此,Flutter 提出了 Sliver 的概念。Flutter 会将子组件分成好多个 Sliver(薄片),只有显示在
ViewPort(视口)的 Sliver 会被构建出来,其他的延迟到展示再进行构建,这种模型也称为
“基于 Sliver 的延迟构建模型”。可滚动组件中很多都支持基于 Sliver 的延迟构建模型,如 ListView、
GridView,但也有不支持该模型的,如 SingleChildScrollView。
相关知识点三:主轴和纵轴
在可滚动组件的坐标描述中,通常将滚动方向称为主轴,非滚动方向称为纵轴。
由于可滚动组件的默认方向一般都是沿着垂直方向,所以默认情况下主轴就是指垂直方向,水平方向同理
相关知识点四:Scrollbar
Scrollbar 是一个 Material 风格的滚动指示器(滚动条),如果要给可滚动组件添加滚动条,
只需将 Scrollbar 作为可滚动组件的任意一个父级组件即可。