美文网首页程序员
Flutter学习笔记21-可滚动组件

Flutter学习笔记21-可滚动组件

作者: zombie | 来源:发表于2020-10-28 11:24 被阅读0次

Flutter提供了多种可滚动组件(Scrollable Widget)用于显示列表和长布局。可滚动组件都直接或间接包含一个Scrollable组件。源码如下:

Scrollable({
  ...
  this.axisDirection = AxisDirection.down,
  this.controller,
  this.physics,
  @required this.viewportBuilder, 
})
  • axisDirection
    滚动方向
  • physics
    此属性接受一个ScrollPhysics类型的对象,它决定可滚动组件如何响应用户操作,比如用户滑动完抬起手指后,继续执行动画;或者滑动到边界时,如何显示。默认情况下,Flutter会根据具体平台分别使用不同的ScrollPhysics对象,应用不同的显示效果,如当滑动到边界时,继续拖动的话,在iOS上会出现弹性效果,而在Android上会出现微光效果。如果你想在所有平台下使用同一种效果,可以显式指定一个固定的ScrollPhysics,Flutter SDK中包含了两个ScrollPhysics的子类,可以直接使用:
    ClampingScrollPhysics:Android下微光效果。
    BouncingScrollPhysics:iOS下弹性效果。
  • controller
    此属性接受一个ScrollController对象。ScrollController的主要作用是控制滚动位置和监听滚动事件。默认情况下,Widget树中会有一个默认的PrimaryScrollController,如果子树中的可滚动组件没有显式的指定controller,并且primary属性值为true时(默认就为true),可滚动组件会使用这个默认的PrimaryScrollController。
  • Scrollbar
    Scrollbar是一个Material风格的滚动条,如果要给可滚动组件添加滚动条,只需将Scrollbar作为可滚动组件的任意一个父级组件即可,如:
Scrollbar(
  child: SingleChildScrollView(
    ...
  ),
);

基于Sliver的延迟构建

通常可滚动组件的子组件可能会非常多、占用的总高度也会非常大;为此,Flutter中提出Sliver概念,如果一个可滚动组件支持Sliver模型,那么该滚动可以将子组件分成好多个Sliver,只有当Sliver出现在视口中时才会去构建它,这种模型也称为“基于Sliver的延迟构建模型”。可滚动组件中有很多都支持基于Sliver的延迟构建模型,如ListView、GridView,但是也有不支持该模型的,如SingleChildScrollView。

主轴和纵轴

在可滚动组件的坐标中,通常将滚动方向称为主轴,非滚动方向称为纵轴。

相关文章

网友评论

    本文标题:Flutter学习笔记21-可滚动组件

    本文链接:https://www.haomeiwen.com/subject/hoyqvktx.html