【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。
- axisDirection:滚动方向。
- 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
【Flutter学习】可滚动组件之ScrollView的更多相关文章
- 【Flutter】可滚动组件之SingleChildScrollView
前言 SingleChildScrollView类似于Android中的ScrollView,它只能接收一个子组件. 接口描述 const SingleChildScrollView({ Key ke ...
- 【Flutter】可滚动组件之滚动控制和监听
前言 可以用ScrollController来控制可滚动组件的滚动位置. 接口描述 ScrollController({ // 初始滚动位置 double initialScrollOffset = ...
- 【Flutter】可滚动组件之CustomScrollView
前言 CustomScrollView是可以使用Sliver来自定义滚动模型(效果)的组件.它可以包含多种滚动模型,举个例子,假设有一个页面,顶部需要一个GridView,底部需要一个ListView ...
- 【Flutter】可滚动组件之ListView
前言 它可以沿一个方向线性排布所有子组件,并且它也可以支持基于Sliver的延迟构建模型. 接口描述 ListView({ Key key, // 可滚动widget公共参数 Axis scrollD ...
- 【Flutter】可滚动组件简介
前言 当组件内容超过当前显示视口(ViewPort)时,如果没有特殊处理,Flutter则会提示Overflow错误.为此,Flutter提供了多种可滚动组件(Scrollable Widget)用于 ...
- 【Flutter学习】组件通信(父子、兄弟)
一,概述 flutter一个重要的特性就是组件化.组件分为两种状态,一种是StatefulWidget有状态组件,一种是StatelessWidget无状态组件. 无状态组件不能更新状态,有状态组件具 ...
- 【Flutter学习】组件学习之目录
01. Flutter组件-Layout-Container-容器 02. Flutter组件-Text-Text-文本 03. Flutter组件-Text-RichText-富文本 04. ...
- 【Flutter】可滚动组件之GridView
前言 GridView可以构建一个二维网格列表.需要关注的是gridDelegate参数,类型是SliverGridDelegate,它的作用是控制GridView子组件如何排列(layout).Sl ...
- Flutter学习笔记(24)--SingleChildScrollView滚动组件
如需转载,请注明出处:Flutter学习笔记(23)--多 在我们实际的项目开发中,经常会遇到页面UI内容过多,导致手机一屏展示不完的情况出现,以Android为例,在Android中遇到这类情况的做 ...
随机推荐
- Code Review怎样做好
一.背景 最近随着交易业务快速扩展,研发组内新项目及新成员越来越多,如何做好Code Review,把控研发人员开发代码质量很是关键. 对于大部分业务团队,谈到Code Review就会面露哀状: ...
- js练习题之图片背景轮播
<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8" ...
- (转)Navicat连接MySQL8.0亲测有效
转:https://www.cnblogs.com/shiysin/p/shiysin.html 今天下了个 MySQL8.0,发现Navicat连接不上,总是报错1251: 原因是MySQL8.0版 ...
- linux显示文本文件指定行数的数据
sed -n '2,4p' /core/home_info.txt 显示这个txt的2-4行,此外还有 cat /core/home_info.txt | tail -n 1000:显示最后100 ...
- php与js互相调用
php中调用js <?php echo '<script>var yearid=$("#yearId").val()</script>'; echo ...
- 动态创建类/ swizzle class
动态创建类 Class subclass = objc_allocateClassPair(baseClass, subclassName, );//生成,指定父类 //添加方法,变量...一些操作 ...
- HBase–RegionServer宕机恢复原理
Region Server宕机总述 HBase一个很大的特色是扩展性极其友好,可以通过简单地加机器实现集群规模的线性扩展,而且机器的配置并不需要太好,通过大量廉价机器代替价格昂贵的高性能机器.但也正因 ...
- mysql学习(1)----------基础语法
进入mysql mysql -u用户名 -p密码 初始用户为root 初始密码为空 status; 查看当前用户,以及数据库的字符集和其他参数的设置 set db characterset= ...
- 基于vue2.0打造移动商城页面实践 vue实现商城购物车功能 基于Vue、Vuex、Vue-router实现的购物商城(原生切换动画)效果
基于vue2.0打造移动商城页面实践 地址:https://www.jianshu.com/p/2129bc4d40e9 vue实现商城购物车功能 地址:http://www.jb51.net/art ...
- f-strings格式化输出
python3.6后加入标准库的格式化输出新的写法 不区分大小写,f,F都可以 可以加入表达式 s1 = 'haha' s = f'python{s1.upper()}' l1 = ['小明', 18 ...