• 【Flutter学习】可滚动组件之ScrollView


    一,概述  

      ScrollView 是一个带有滚动的视图组件。

    二,组成部分

    ScrollView 由三部分组成:

    • Scrollable - 它监听各种用户手势并实现滚动的交互设计。可滚动Widget都直接或间接包含一个Scrollable widget,因此它们包括一些共同的属性,我们在此统一介绍一下:
      Scrollable({
        ...
        this.axisDirection = AxisDirection.down,
        this.controller,
        this.physics,
        @required this.viewportBuilder, //后面介绍
      })

      参数含义:

      • axisDirection:滚动方向。
        • 主轴和纵轴

          在可滚动widget的坐标描述中,通常将滚动方向称为主轴,非滚动方向称为纵轴。由于可滚动widget的默认方向一般都是沿垂直方向,所以默认情况下主轴就是指垂直方向,水平方向同理。

      • physics:此属性接受一个ScrollPhysics对象,它决定可滚动Widget如何响应用户操作,比如用户滑动完抬起手指后,继续执行动画;或者滑动到边界时,如何显示。默认情况下,Flutter会根据具体平台分别使用不同的ScrollPhysics对象,应用不同的显示效果,如当滑动到边界时,继续拖动的话,在iOS上会出现弹性效果,而在Android上会出现微光效果。如果你想在所有平台下使用同一种效果,可以显式指定,Flutter SDK中包含了两个ScrollPhysics的子类可以直接使用:
        • ClampingScrollPhysics:Android下微光效果。
        • BouncingScrollPhysics:iOS下弹性效果。
      • controller:此属性接受一个ScrollController对象。ScrollController的主要作用是控制滚动位置和监听滚动事件。默认情况下,widget树中会有一个默认的PrimaryScrollController,如果子树中的可滚动widget没有显式的指定controller并且primary属性值为true时(默认就为true),可滚动widget会使用这个默认的PrimaryScrollController,这种机制带来的好处是父widget可以控制子树中可滚动widget的滚动,例如,Scaffold使用这种机制在iOS中实现了"回到顶部"的手势。我们将在本章后面“滚动控制”一节详细介绍ScrollController。
    • Viewport - 它通过在滚动视图内仅显示一部分小部件来实现滚动的可视化设计。
      在很多布局系统中都有ViewPort的概念,在Flutter中,术语ViewPort(视口),如无特别说明,则是指一个Widget的实际显示区域。例如,一个ListView的显示区域高度是800像素,虽然其列表项总高度可能远远超过800像素,但是其ViewPort仍然是800像素。
    • Slider - 它们是可以组合以创建各种滚动效果的小部件,如列表,网格和扩展标题。

    三,ScrollView 有以下常用属性:

    • cacheExtent → double - 视口在可见区域之前和之后有一个区域,用于缓存用户滚动时即将可见的项目。
    • controller → ScrollController - 一个可用于控制滚动视图滚动到的位置的对象。
    • physics → ScrollPhysics - 滚动视图应如何响应用户输入。
    • primary → bool - 是否是与父级关联的主滚动视图。
    • reverse → bool - 滚动视图是否在阅读方向上滚动。
    • scrollDirection → Axis - 滚动视图滚动的轴。
    • shrinkWrap → bool - 应该根据正在查看的内容确定滚动视图的范围。

    注:ScrollView 是一个抽象类,通常使用 CustomScrollView。

    四,示例

    new CustomScrollView(
        shrinkWrap: true,
        // 内容
        slivers: <Widget>[
          new SliverPadding(
                 padding: const EdgeInsets.all(20.0),
                  sliver: new SliverList(
                     delegate: new SliverChildListDelegate(
                       <Widget>[
                            const Text('A'),
                            const Text('B'),
                            const Text('C'),
                            const Text('D'),
                       ],
                     ),
                  ),
         ],
    )

    五,可滚动的Widget

      • ListView

        一个可滚动的列表 

      • NestedScrollView

        一个可以嵌套其它可滚动widget的widget

      • GridView

        一个可滚动的二维空间数组

      • SingleChildScrollView

        有一个子widget的可滚动的widget,子内容超过父容器时可以滚动。

      • Scrollable

        实现了可滚动widget的交互模型,但不包含UI显示相关的逻辑

      • Scrollbar

        一个Material Design 滚动条,表示当前滚动到了什么位置

      • CustomScrollView

        一个使用slivers创建自定义的滚动效果的ScrollView

      • NotificationListener

        一个用来监听树上冒泡通知的widget。

      • ScrollConfiguration

        控制可滚动组件在子树中的表现行为

      • RefreshIndicator

        Material Design下拉刷新指示器,包装一个可滚动widget


      



  • 相关阅读:
    从零开始学 Web 之 Vue.js(一)Vue.js概述,基本结构,指令,事件修饰符,样式
    从零开始学 Web 之 Vue.js(二)过滤器,按键修饰符,自定义指令
    js获取某个时间段前多长时间
    Object.create()详解
    React Redux
    react 路由按需加载
    react @types/react-router-dom报错
    create-react-app 创建react ts项目启动报错
    十进制转二进制、八进制、十六进制(js)
    代码编辑器设置自定义提示
  • 原文地址:https://www.cnblogs.com/lxlx1798/p/11116293.html
Copyright © 2020-2023  润新知