当内容超过显示视口(ViewPort)时,如果没有特殊处理,Flutter则会提示Overflow错误。为此,Flutter提供了可滚动Widget用于显示列表和长布局。 下面是Srollable widget的公共属性,为了避免重复介绍,这里做统一介绍。

1
2
3
4
5
6
7
Scrollable({
  ...
  this.axisDirection = AxisDirection.down,
  this.controller,
  this.physics,
  @required this.viewportBuilder, //后面介绍
})
  • axisDirection: 滚动方向。
  • physics: 此属性接受一个ScrollPhysics对象,它决定可滚动Widget如何响应用户操作,比如用户滑动完抬起手指后,继续执行动画;或者滑动到边界时,如何显示。默认情况下,Flutter会根据平台使用不同的ScrollPhysics对象,应用不同的显示效果,如当滑动到边界时,继续拖动的话,在IOS上会出现弹性效果,而在Android上回出现微光效果。乳沟你想在所有平台上使用同一的效果,可以显示指定,Flutter SDK中包含了两个ScrollPhysics的子类可以直接使用:
    • ClampingScrollPhysics: Android下微光效果。
    • BouncingScrollPhysics: IOS下弹性效果。
  • controller: 此属性接收一个ScrollController对象。ScrollController主要作用是控制滚动位置和监听滚动事件。默认情况下,widget树种会有一个默认的PromaryScrollController, 如果子树中的可滚动widget没有显示的执行controller并且primary属性为true时(默认就为true),可滚动widget会使用这个默认的PrimarySrollController,这种机制的好处是父widget可以控制子树中可滚动widget的滚动,例如,Scaffold使用这种机制在IOS中实现了“回到顶部”的手势。详细介绍见滚动监听及控制ScrollController