RELATEED CONSULTING
相关咨询
选择下列产品马上在线沟通
服务时间:8:30-17:00
你可能遇到了下面的问题
关闭右侧工具栏

新闻中心

这里有您想知道的互联网营销解决方案
包含flutter省市联动的词条

Flutter 之 可滚动组件 -- 理论知识点(十四)

Flutter 中有两种布局模型:

创新互联是一家专业提供宾川企业网站建设,专注与网站设计制作、网站设计html5、小程序制作等业务。10年已为宾川众多企业、政府机构等服务。创新互联专业网站制作公司优惠进行中。

基于 RenderBox 的盒模型布局。

基于 Sliver ( RenderSliver ) 按需加载列表布局。

通常可滚动组件的子组件可能会非常多、占用的总高度也会非常大;如果要一次性将子组件全部构建出将会非常昂贵!为此,Flutter中提出一个Sliver(中文为“薄片”的意思)概念,Sliver 可以包含一个或多个子组件。Sliver 的主要作用是配合:加载子组件并确定每一个子组件的布局和绘制信息,如果 Sliver 可以包含多个子组件时,通常会实现按需加载模型。

只有当 Sliver 出现在视口中时才会去构建它,这种模型也称为“基于Sliver的列表按需加载模型”。可滚动组件中有很多都支持基于Sliver的按需加载模型,如 ListView 、 GridView ,但是也有不支持该模型的,如 SingleChildScrollView 。

Flutter 中的可滚动主要由三个角色组成: Scrollable 、 Viewport 和 Sliver :

具体布局过程:

比如有一个 ListView,大小撑满屏幕,假设它有 100 个列表项(都是RenderBox)且每个列表项高度相同,结构如图6-1所示:

图中白色区域为设备屏幕,也是 Scrollable 、 Viewport 和 Sliver 所占用的空间,三者所占用的空间重合,父子关系为:Sliver 父组件为 Viewport,Viewport的 父组件为 Scrollable 。注意ListView 中只有一个 Sliver,在 Sliver 中实现了子组件的按需加载。

其中顶部和底部灰色的区域为 cacheExtent,它表示预渲染的高度,需要注意这是在可视区域之外,如果 RenderBox 进入这个区域内,即使它还未显示在屏幕上,也是要先进行构建的,预渲染是为了后面进入 Viewport 的时候更丝滑。cacheExtent 的默认值是 250,在构建可滚动列表时我们可以指定这个值,这个值最终会传给 Viewport。

用于处理滑动手势,确定滑动偏移,滑动偏移变化时构建 Viewport,我们看一下其关键的属性:

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

Viewport 比较简单,用于渲染当前视口中需要显示 Sliver。

需要注意的是:

Sliver 主要作用是对子组件进行构建和布局,比如 ListView 的 Sliver 需要实现子组件(列表项)按需加载功能,只有当列表项进入预渲染区域时才会去对它进行构建和布局、渲染。

Sliver 对应的渲染对象类型是 RenderSliver,RenderSliver 和 RenderBox 的相同点是都继承自 RenderObject 类,不同点是在布局的时候约束信息不同。RenderBox 在布局时父组件传递给它的约束信息对应的是 BoxConstraints ,只包含最大宽高的约束;而 RenderSliver 在布局时父组件(列表)传递给它的约束是对应的是 SliverConstraints 。关于 Sliver 的布局协议,我们将在本章最后一节中介绍。

几乎所有的可滚动组件在构造时都能指定 scrollDirection (滑动的主轴)、 reverse (滑动方向是否反向)、 controller 、 physics 、 cacheExtent ,这些属性最终会透传给对应的 Scrollable 和 Viewport,这些属性我们可以认为是可滚动组件的通用属性,后续再介绍具体的可滚动组件时将不再赘述。

可滚动组件都有一个 controller 属性,通过该属性我们可以指定一个 ScrollController 来控制可滚动组件的滚动,比如可以通过ScrollController来同步多个组件的滑动联动。由于 ScrollController 是需要结合可滚动组件一起工作,所以本章中,我们会在介绍完 ListView 后详细介绍 ScrollController。

Scrollbar是一个Material风格的滚动指示器(滚动条),如果要给可滚动组件添加滚动条,只需将Scrollbar作为可滚动组件的任意一个父级组件即可,如:

Scrollbar 和 CupertinoScrollbar 都是通过监听滚动通知来确定滚动条位置的。关于的滚动通知的详细内容我们将在本章最后一节中专门介绍。

CupertinoScrollbar是 iOS 风格的滚动条,如果你使用的是Scrollbar,那么在iOS平台它会自动切换为CupertinoScrollbar

Flutter实战:撸半个知乎日报

感谢 知乎日报-API-分析 提供的api帮助完成这个demo

该项目完全开源,单纯为了学习与交流,希望大家喜欢,多多提意见。

后续会将未来学到的新知识点用到该项目,持续更新

1.今日热点

2.主题分类

3.文章详情

4.抽屉列表增加缓存, 防止多次拉去数据

5.评论列表 (界面,动画优化)

6.主题列表 (界面,动画优化)

7.主页banner自动轮播,手指滑动是禁止轮播,放开则继续

8.刷新数据失败,增加重试按钮

9.分享UI

9.登录UI,联动交互(在评论界面可以点击写点评进入)

1.Flutter加载Html

1.注册

2.登录

3.发表评论

4.收藏

5.等等

Flutter之NestedScrollView与ListView联动的问题

用于记录解决NestedScrollView与ListView共用时当ListView滑动时,NestedScrollView不跟着滑动的问题。

当ListView需要ScrollController的时候,NestedScrollView就会和ListView的滚动失去关联,此时我们只要把ScrollController换成NotificationListener即可。

如果各位亲有什么其他的解决方法,记得安利我哦。。。

Flutter ScrollView(滚动视图)

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

ScrollView 由三部分组成:

ScrollView 有以下常用属性:

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

SliverAppBar 可以实现背景,标题,顶部导航栏联动,渐隐渐出动画。


当前文章:包含flutter省市联动的词条
文章路径:http://scyingshan.cn/article/dschpes.html