前言
Flutter中Sliver是跟Widget滚动相关的一些Widget。在app的开发过程中,滚动的使用随处可见,商品信息的列表展示,股票下拉刷新最新的行情等等。总结下来就是:要展示的内容的长度超过了当前屏幕的显示范围的时候,我们就会用到滚动组件。最常见的就是ListView和GridView。大部分的情况下,常见的ListView和GridView基本上能满足用户的需求,当我们要实现一些复杂的动画的时候,Sliver组件就派上了用场。比如说下面的动画效果,我们就可以使用Slivers轻松的实现。
通常可滚动组件的子组件可能会非常多、占用的总高度也会非常大;如果要一次性将子组件全部构建出将会非常昂贵!为此,Flutter中提出一个Sliver(中文为“薄片”的意思)概念,Sliver 可以包含一个或多个子组件。Sliver 的主要作用是配合:加载子组件并确定每一个子组件的布局和绘制信息,如果 Sliver 可以包含多个子组件时,通常会实现按需加载模型。
只有当 Sliver 出现在视口中时才会去构建它,这种模型也称为“基于Sliver的列表按需加载模型”。可滚动组件中有很多都支持基于Sliver的按需加载模型,如ListView、GridView,但是也有不支持该模型的,如SingleChildScrollView。
Flutter 中的可滚动组件主要由三个角色组成:Scrollable、Viewport 和 Sliver:
一、Scrollable
这个东西万物离不开它,基本所有滚动组件List、grid都用到这个组件,但实际工作上我们并不知节使用它。滚动组件的底层就是它,包含处理一些ScrollPosition监听和手势处理。
二、Viewport
简义视窗,滚动组件的可见渲染区,负责渲染子slivers以及他们之间的位置和大小。
三、Slivers
(1)SliverList、SliverGridView
这个简单来说,就是一个ListView和GridView。
(2)SliverToBoxAdapter
一个Sliver大小是基于它的子child来决定的
(3) SliverFillRemaining
一个sliver可以把Viewport可见区域的剩余空间给它填满
(4)Sliver Fill ViewPort
这个Sliver的大小=Viewport可见区域的大小(一屏的大小)
(5) SliverAppbar
App bar可支持联合滑动的Sliver
(6) SliverPadding
SLiver加上padding
(7) CupertinoSliverRefreshControl
iOS风格的下拉刷新header