YAML 是一个标记性语言,它对大小写敏感,由于不像其他类型文件的数据格式拥有明显的父、子级标记而是默认使用空格缩进(2个空格)代表层级,比如用“- ”(中划线+空格)来表示列表。...简单来说(翻译一下),通常在可滚动列表的容器中子项都会被装在重绘边界之内,以便列表在滚动时不需要将它们进行重绘。...ClampingScrollPhysics 我也不知道为什么要用 Clamping,可能是像钳子一样拥有最大张合度吧。在默认情况下,如果列表子元素不足以超出可视范围则不会产生可滚动行为。...BouncingScrollPhysics 的话就是大家都熟悉的回弹效果了,当操作列表到达可视范围尽头时还可以继续超出一定的空间,当失去焦点后回到尽头的位置,这样就能给予用户一个良好的使用体验。...Ok,那我们就来看看代码是如何实现的。 当 itemCount 设置为 null 时就可以实现无限下拉列表。少侠小伙伴们可以在代码中尝试修改一下看看效果。
可滚动组件 当组件内容超过当前显示视口(ViewPort)时,如果没有特殊处理,Flutter 就会提示 Overflow 错误,为此,Flutter 提供了多种可滚动组件,用于显示列表和长布局; 可滚动组件都直接或间接的包含一个...这种机制带来的好处是父组件可以控制子树中可滚动组件的滚动行为,例如,Scaffold 正是使用这种机制在 IOS 上实现了点击导航栏回到顶部的功能 Scrollbar Scrollbar 是一个 Material...其实此属性的本质上是决定可滚动组件的初始滚动位置是在 头 还是在 尾 ,如 false 时,初始位置在头,反之则在 尾 primary:指是否使用 widget 树中默认的 PrimaryScrollController...当 ListView 在一个无边界(滚动方向上)的容器中时, shrinkWrap 必须为 true addAutomaticKeepAlives:该属性表示是否将列表项(子组件) 包裹在 AutomaticKeepAlive...当列表滚动到具体的 index 位置时,会调用该构建起构建列表项。
默认情况下,Flutter会根据具体平台分别使用不同的ScrollPhysics对象,应用不同的显示效果,如当滑动到边界时,继续拖动的话,在iOS上会出现弹性效果,而在Android上会出现微光效果。...默认情况下,Flutter会根据具体平台分别使用不同的ScrollPhysics对象,应用不同的显示效果,如当滑动到边界时,继续拖动的话,在iOS上会出现弹性效果,而在Android上会出现微光效果。...指定 itemExtent 的值比让子元素决定自身长度在绘制时更高效,特别是在滚动位置频繁变化的状态下,因为设置 itemExtent 可以让滚动系统提前知道列表的长度。...ListView.builder 当 listview 的列表项较多或数量未知时,就需要使用 ListView.builder 来构建列表了 import 'package:flutter/material.dart...默认情况下,Flutter会根据具体平台分别使用不同的ScrollPhysics对象,应用不同的显示效果,如当滑动到边界时,继续拖动的话,在iOS上会出现弹性效果,而在Android上会出现微光效果。
6.1.1 Scrollable组件 在Flutter中,一个可滚动的组件直接或间接包含一个Scrollable组件,它是可滚动组件的基础组件。...bool primary,//是否是与父级关联的主滚动视图 this.physics,//设置滚动效果 this.controller,//控制滚动位置,当primary为true时,controller...CustomScrollView作为容器组件时,子组件不能是ListView、GridView等可滚动组件,会造成滚动冲突。...在实际使用过程中,Flutter提供了SliverList、SliverGrid等可滚动组件的Sliver版本。...= true,//是否保持滚动位置 this.debugLabel, }) 当keepScrollOffset的属性值为true时,可滚动组件的滚动位置会被存储到PageStorage中,当可滚动组件重新创建时可以使用
这样的需求,在iOS中是用UITableView实现的;而在Flutter中,实现这种需求的则是列表控件ListView。...ListView 在Flutter中,ListView可以沿一个方向(垂直或者水平方向)来排列其所有子Widget,因此常被用于需要展示一组连续视图元素的场景,比如通讯录、优惠券、商家列表等。...所以,考虑到创建子Widget产生的性能问题,更好的方法是抽象出创建子Widget的方法,交由ListView统一管理,在真正需要展示该子Widget时再去创建。...当列表滚动到相应位置时,ListView会调用该方法创建对应的子Widget。 itemCount,表示列表项的数量,如果为空,则表示ListView为无限列表。...与ScrollController不同的是,NotificationListener是一个Widget,为了监听滚动类型的事件,我们需要将NotificationListener添加为ListView的父容器
前言 当组件内容超过当前显示视口(ViewPort)时,如果没有特殊处理,Flutter则会提示Overflow错误。...在ListView中,指定itemExtent比让子组件自己决定自身长度会更高效,这是因为指定itemExtent后,滚动系统可以提前知道列表的长度,而无需每次构建子组件时都去再计算一下,尤其是在滚动位置频繁变化时...当ListView在一个无边界(滚动方向上)的容器中时,shrinkWrap必须为true。...当可滚动组件滚动时,将列表项包裹在RepaintBoundary中可以避免列表项重绘,但是当列表项重绘的开销非常小(如一个颜色块,或者一个较短的文本)时,不添加RepaintBoundary反而会更高效...注意,这里的子元素指的是子组件的最大显示空间,注意确保子组件的实际大小不要超出子元素的空间。
StateLessWidget 在 Flutter 中,Widget 采用由父到子、自顶向下的方式进行构建,父 Widget 控制着子 Widget 的显示样式,其样式配置由父 Widget 在构建时提供...当列表滚动到相应位置时,ListView 会调用该方法创建对应的子 Widget。 itemCount,表示列表项的数量,如果为空,则表示 ListView 为无限列表。...的父容器,从而捕获 ListView 中的通知。...,可以发现:尽管父容器也监听了点击事件,但 Flutter 只响应了子容器的点击事件。...事件总线是在 Flutter 中实现跨组件通信的机制。它遵循发布 / 订阅模式,允许订阅者订阅事件,当发布者触发事件时,订阅者和发布者之间可以通过事件进行交互。
在Flutter中,我们也有对应的列表Widget,就是ListView。 注意:在Flutter里面想要实现滑动效果,都需要在组件外部包裹滚动的视图。...当子Widget即将被展示到屏幕中时,itemBuilder函数才会被调用。...在Flutter中我们可以使用GridView来实现,使用方式和ListView也比较相似。...,如果横轴长度是450,那么当maxCrossAxisExtent的值在区间[450/4,450/3)内的话,子元素最终实际长度都为112.5。...比如视图滚动到底部时,我们可能希望做上拉加载更多;比如滚动到一定位置时显示一个回到顶部的按钮,点击回到顶部的按钮,回到顶部;比如监听滚动什么时候开始,什么时候结束; 在Flutter中监听滚动相关的内容由两部分组成
如果要构建这样的一款App,我需要先构建一个App首页,包含了一个可以滚动的列表,如果可以,还可以添加一些其他的组件。以及基础的布局组件。...,主要是负责容器的布局,有点类似HTML中的div标签,可以设置padding和margin。...需要注意的是,在Flutter中,少数Widget才可以设置padding和margin,大部分Widget是不行的,所以如果要设置这些属性,我们需要使用Container进行包裹。...因为首页我们要显示的是一个长列表,所以我们需要使用ListView,这个在Flutter是一个简单的列表组件,Flutter中还包含了其余的多种列表组件,这些以后再介绍。...子组件中,你如果首先想到的是时候MaterialApp,那么你可以考虑换成Scaffold或者其他的容器组件 end 上面就是关于搭建这样一个App需要了解的一些基本的Widget以及其属性,上面并没有涉及到全部的属性
Flutter中的SingleChildScrollView类似于Android中的ScrollView,它只能接收一个子组件。...树中默认的`PrimaryScrollController` this.physics, //决定可滚动组件如何响应用户操作,滑动到边界时,出现弹性(ios)还是微光(android) this.controller...“头”,true在“尾”,默认false padding 内边距 primary 是否使用widget树中默认的PrimaryScrollController,当scrollDirection值为Axis.vertical...,并且没有指定controller时,primary默认为true. physics 决定可滚动组件如何响应用户操作,滑动到边界时,出现弹性(ios)还是微光(android),ClampingScrollPhysics...为此,Flutter中提出一个Sliver(中文为”薄片“的意思)概念,如果一个可滚动组件支持Sliver模型,那么该滚动可以将子组件分成好多个”薄片“(Sliver),只有当Sliver出现在视口中时才会去构建它
ListView是最常用的可滚动组件之一,它可以沿一个方向线性排布所有子组件,并且它也支持基于Sliver的延迟构建模型。...Flutter中的ListView与Android中的ListView具有同等功能。...Sliver的延迟构建模型请参见本系列文章《Flutter SingleChildScrollView 滚动控件》中的基本概念处。 本文示例效果图(全) ?...shrinkWrap 是否根据子组件的总高度来设置ListView的高度,默认为false 。当ListView在一个无边界(滚动方向上)的容器中时,shrinkWrap必须为true。...当列表滚动到具体的index位置时,会调用该构建器构建列表项。 itemCount 列表项的数量,如果为null,则为无限列表。
您可以为widget构造函数指定相对于父组件的布局规则。 推荐参考在StackOverflow上的一个在Flutter中构建RelativeLayout的例子。 如何使用widget定义布局属性?...ScrollView在Flutter中等价于什么? 在Android中,ScrollView允许您包含一个子控件,以便在用户设备的屏幕比控件内容小的情况下,使它们可以滚动。...在Flutter中,最简单的方法是使用ListView。但在Flutter中,一个ListView既是一个ScrollView,也是一个Android ListView。...在 iOS 中,你给 view 包裹上 ScrollView 来允许用户在需要时滚动你的内容。在 Flutter 中,最简单的方法是使用 ListView widget。...当它得到你的 ListView 时,它会使用一个 == 判断,并且发现两个 ListView 是相同的。没有什么东西是变了的,因此更新不是必须的。
二、 ScrollPhysics 首先介绍 ScrollPhysics ,在 Flutter 官方的介绍中,ScrollPhysics 的作用是 确定可滚动控件的物理特性, 常见的有以下四大金刚: BouncingScrollPhysics...在开发过程中,一般会通过如下代码进行设置: CustomScrollView(physics: const BouncingScrollPhysics()) ListView.builder(physics...Flutter 中的 ListView 、CustomScrollView 等 Scrollable 控件,在 Android 和 iOS 平台的滚动和边界拖拽效果,会有如下图所示的平台区别呢?...如下代码所示,在 Scrollable 内的 _updatePosition 方法里,当 widget.physics == null 时,_physics 默认是从 ScrollConfiguration.of...applyPhysicsToUserOffset 方法进行了 override ,其中 用户没有达到边界前,依旧返回默认的 offset,当用户到达边界时,通过算法来达到模拟溢出阻尼效果。
GridView 将多个widget放在一个可滑动的表格中。 ListView 将多个widget放在一个可滑动的列表中。 Stack 在一个widget上面盖上另一个widget。...GridView 小结: 将多个widget放进一个表格中 当超出渲染范围时,自动提供滚动功能 可自定义格子,也可用下面提供的2种 GridView.count 指定列的数目 GridView.extent...ListView ListView能以列的形式展示数据。当内容超过渲染范围时,自动提供滚动的功能。...显示的widget可以完全地把底部widget盖住。...Stack 小结: 用来在当前widget上面再盖上一层widget Stack children中的第一个widget放在最下,后面的widget会一层层盖上去 Stack的内容不支持滚动 可以裁剪超出范围的子
在布局过程中,渲染对象树中的每个渲染对象都会接收父对象的布局约束参数,决定自己的大小,然后父对象按照控件逻辑决定各个子对象的位置,完成布局过程。...五、Flutter的基础 StatelessWidget Widget 采用由父到子、自顶向下的方式进行构建,父 Widget 控制着子 Widget 的显示样式,其样式配置由父 Widget 在构建时提供...didUpdateWidget:当 Widget 的配置发生变化时,比如,父 Widget 触发重建(即父 Widget 的状态发生变化时),热重载时,系统会调用这个函数。...因为如果这个参数为 null,ListView 会动态地根据子 Widget 创建完成的结果,决定自身的视图高度,以及子 Widget 在 ListView 中的相对位置。...通过 NotificationListener 则: 可以监听其子 Widget 中的任意 ListView; 不仅可以得到这些 ListView 的当前滚动位置信息,还可以获取当前的滚动事件信息 。
SizedBox SizedBox有下面几个使用场景: 当你需要一个确切尺寸的Widget时,通过SizedBox来进行约束 在父容器中撑满剩余空间 在没有child的情况下,对空间做分割 场景1: SizedBox...FractionallySizedBox 这是Flutter给你提供的一个百分百布局工具。通常用于在父容器中,按照百分比来进行布局。...LimitedBox 当Widget没有父级来限制它们的尺寸时,如何在Widget上设置它的默认大小呢?这就需要使用到LimitedBox了。...LimitedBox只在父容器没有提供尺寸约束时,对子Widget的尺寸进行默认约束,在在Listview和Column、Row中是非常有用的。...FittedBox 在Flutter中,Widget之间可以任意堆叠、嵌套,所以,当子Widget的尺寸与父Widget尺寸不一致时,就会产生一些奇怪的样式,FittedBox就是用来处理这种场景的。
老孟导读:昨天Flutter 1.17版本重磅发布,新的版本主要是优化性能、修复bug,有人觉得此版本毫无亮点,但也从另一方面体现了Flutter目前针对移动端已经较为完善,想了解具体内容,文末有链接,...在普通的ScrollView中, 如果有一个Sliver组件容纳了一个TabBarView,它沿相反的方向滚动(例如,允许用户在标签所代表的页面之间水平滑动,而列表则垂直滚动),则该TabBarView...例如,浏览内部列表以滚动到顶部不会导致外部ScrollView中的SliverAppBar折叠以展开。...滚动隐藏AppBar 比如实现如下场景,当列表滚动时,隐藏AppBar,用法如下: NestedScrollView( headerSliverBuilder: (BuildContext context...reverse参数表示反转滚动方向,并不是由垂直转为水平,而是垂直方向滚动时,默认向下滚动,reverse设置false,滚动方向改为向上,同理水平滚动改为水平向左。
Flutter 中可以使用 Listener widget 来监听原始触摸事件,它也是一个功能性 widget。...') ) ); 使用场景一: 下拉刷新,上拉加载 如果实现下拉刷新,必须借助 RefreshIndicator,在 listview 外面包裹一层 RefreshIndicator,然后在 RefreshIndicator...进行监听,所以需要进行监听器的设置,在 State 中进行监听器的初始化。...Listener 来监听,通过 Listener 的 onPointerMove(手指在屏幕上滑动)来监听滑动的距离,当滑动到底部时加载更多数据 new Listener( onPointerMove...说明到达底部 print("================向上移动================"); print("scrollController==滑动距离=====
CustomScrollView CustomScrollView是使用Sliver组件创建自定义滚动效果的滚动组件,使用场景: ListView和GridView相互嵌套场景,ListView嵌套GridView...时,需要给GridView指定高度,但我们希望高度随内容而变化(不指定),ListView和GridView作为整体滚动效果。...相互嵌套场景 在实际业务场景中经常见到这样的布局,顶部是网格布局(GridView),然后是列表布局(ListView),滚动的时候做为一个整体,此场景是无法使用GridView+ListView来实现的...primary设置为true时,不能设置controller,因为primarytrue时,controller使用PrimaryScrollController,这种机制带来的好处是父组件可以控制子树中可滚动组件的滚动行为...,例如,Scaffold正是使用这种机制在iOS中实现了点击导航栏回到顶部的功能。
1.ListView 的基本使用 ListView 是一个盛放多个孩子的容器。...中不同的条目样式。...在抽取条目时,可以定义一个type属性,条目样式由Widget自身决定。..., "在苍茫的大海上,狂风卷积着乌云,在乌云和大海之间,海燕像黑色的闪电,在高傲的飞翔。"...无法滑动 PageScrollPhysics() 会根据你的滑动来自动调节,比如你滑的距离小,则自动还原, 到达一定大小,也会自动下滑一个条目 BouncingScrollPhysics() 顶底会有而外空间
领取专属 10元无门槛券
手把手带您无忧上云