
正文
flutter懒加载,flutter创建卡住
提示:扫一扫查出行【扫一扫了解最新限行尾号】
复制提示
CustomScrollView高性能滚动
白话:基于Sliver模型是高性能的,只有出现在可视范围内的组件才够构建,界面外的组件不构建。
官话:Flutter中提出一个Sliver(中文为“薄片”的意思)概念,如果一个可滚动组件支持Sliver模型,那么该滚动可以将子组件分成好多个“薄片”(Sliver),只有当Sliver出现在视口中时才会去构建它,这种模型也称为“基于Sliver的延迟构建模型”。
可滚动组件中有很多都支持基于Sliver的延迟构建模型,如ListView、GridView,CustomScrollView但是也有不支持该模型的,如SingleChildScrollView(性能很低,所有UI都会完整的绘制)。
CustomScrollView是可以使用Sliver来自定义滚动模型(效果)的组件。它可以包含多种滚动模型。CustomScrollView可以实现把多个彼此独立的可滑动widget组合起来,并且是高性能的。
CustomScrollView可以控制SliverListView根据需要才构建item,类似与分页加载,复用加载,数据量比较大的时候对提高加载效率非常有帮助。
CustomScrollView:高性能,懒加载,只构建屏幕可视范围内组件,超出屏幕外的组件等滑动的时候再构建,适用于子widget数据量较大的场景。
SingleChildScrollView:低性能,完整加载,直接把整个child完整的构建出来,只适用于子widget数量有限的场景。
我们用CustomScrollView把“导航栏”和“瀑布流”组合在一起,并且依然保持很好的滚动性能。
CustomScrollView下使用的listview也必须是基于sliver模型的,如SliverMasonryGrid,SliverListView,SliverGridView,这样CustomScrollView可以计算listview中需要构建的items。非Sliver组件需要用SliverToBoxAdapter包起来。
瀑布流Demo如下:
实践效果:
相关问答
Q1: Flutter TextFormField 控件
一个FormField包含TextField,它将TextField小部件包装在FormField中。
表单(From)使一次进行保存、重置或验证多个字段变得更容易。要在没有表单(From)的情况下使用,请将GlobalKey传递给构造函数,并使用GlobalKey.currentState保存或重置表单字段。
指定控制器时,initialValue必须为null(默认值)。如果controller为null,那么TextEditingController将被自动构造,其文本将初始化为initalValue或空字符串。如果这个FormField是滚动容器的一部分,该容器懒加载它的子对象,比如ListView或CustomScrollView,那么应该指定一个控制器。控制器的生命周期应该由滚动容器的有状态小部件祖先来管理。
[img]




