首页
学习
活动
专区
圈层
工具
发布

Flutter | 滚动组件,ListView,GridVIew等

可滚动组件 当组件内容超过当前显示视口(ViewPort)时,如果没有特殊处理,Flutter 就会提示 Overflow 错误,为此,Flutter 提供了多种可滚动组件,用于显示列表和长布局; 可滚动组件都直接或间接的包含一个...默认情况下,Flutter 会根据具体的平台分别使用不同的 ScrollPhysics 对象,应用不同的显示效果,在 IOS 上会出现弹性效果,而在 android 上则会出现微光效果,如果你想在所有的平台下使用同一个效果...为此,Flutter 中提出了一个 Sliver(薄片) 概念,只有当 Sliver 出现在视口时才会去构建他,这种模型也被称为 基于 Sliver 的延时构建模型 。...当列表滚动到具体的 index 位置时,会调用该构建起构建列表项。...setState 重新构建 在 itemBuilder 中,如果是最后一个,并且小于200 则加载数据,大于 200 之后则不加载数据 Pub 上有一个 flutter_staggered_grid_view

9.2K20
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    半小时带你入门 Flutter

    RendObject才是真正经过layout和paint并绘制在屏幕上的对象。...,继承自StateFulWidget,意味着这个类拥有一个state对象,该对象里的一些字段会影响app的UI // 这个类是state的一些配置项。...(() { // setState方法告诉Flutter,这个State中有些值发生了变化,以便及时将新值更新到UI上, // 如果我不通过setState更改_count字段,...) { // build方法会在每次setState的时候重新运行,例如上面的_incrementCounter方法被调用 //Flutter已经被优化了重新构建的方法,所以你只会去更新需要去更新的部分...GridView 可滚动的网格布局,理解为display:grid GridView提供两个预制list,当GridView检测到内容太长时,会自动滚动。

    1.8K20

    《Flutter》-- 6.高级组件

    6.1.1 Scrollable组件 在Flutter中,一个可滚动的组件直接或间接包含一个Scrollable组件,它是可滚动组件的基础组件。...对象,控制滚动位置和监听滚动事件 this.physics,//用于接收一个ScrollPhysics对象,可以决定滚动组件响应用户操作的方式 @required this.viewportBuilder...CustomScrollView作为容器组件时,子组件不能是ListView、GridView等可滚动组件,会造成滚动冲突。...bool addAutomaticKeepAlives = true,//是否将列表项包裹在AutomaticKeepAlive组件中,默认值为true,表示列表项滑出视图窗口时不会被垃圾回收,会保存之前的状态...ListView.builder特有的属性: 1)itemBuilder:用于构建列表项的可见子组件构建器,只有索引>= 0且时才会被调用; 2)itemCount:列表项的数量,

    11.3K20

    Flutter从入门到能寄几玩儿

    RendObject才是真正经过layout和paint并绘制在屏幕上的对象。...,继承自StateFulWidget,意味着这个类拥有一个state对象,该对象里的一些字段会影响app的UI // 这个类是state的一些配置项。...(() { // setState方法告诉Flutter,这个State中有些值发生了变化,以便及时将新值更新到UI上, // 如果我不通过setState更改_count字段,...) { // build方法会在每次setState的时候重新运行,例如上面的_incrementCounter方法被调用 //Flutter已经被优化了重新构建的方法,所以你只会去更新需要去更新的部分...GridView 可滚动的网格布局,理解为display:grid GridView提供两个预制list,当GridView检测到内容太长时,会自动滚动。

    1.6K10

    Flutter可滑动组件

    Flutter可滑动组件 1. ListView 1.1 ListView介绍 移动端数据量比较大时,一般都是通过列表来进行展示的,比如商品数据、聊天列表、通信录、朋友圈等。...1.3 ListTile 在开发中,我们经常见到一种列表,有一个图标或图片(Icon),有一个标题(Title),有一个子标题(Subtitle),还有尾部一个图标(Icon)。...当子Widget即将被展示到屏幕中时,itemBuilder函数才会被调用。...() 在上面使用默认构造器创建GridView时,需要传入gridDelegate对象。...比如视图滚动到底部时,我们可能希望做上拉加载更多;比如滚动到一定位置时显示一个回到顶部的按钮,点击回到顶部的按钮,回到顶部;比如监听滚动什么时候开始,什么时候结束; 在Flutter中监听滚动相关的内容由两部分组成

    7.6K30

    Flutter | 和小老弟一起玩转Widget

    **这是因为在实际渲染时,UI 上的每一个 Element 节点都会对应一个Widget对象。...createElement() Flutter Framework在构建UI树时,会先调用此方法生成对应节点的 Element 对象,此方法是 Flutter Framework 隐私调用的。...其 setState() 方法通知 Flutter framework状态发送改变,Flutter framework在收到消息后,会重新调用其 build 方法重新构建 widget 树,从而达到更新...widget 示例在重新构建时可能会变化,但 State 实例只会在第一次插入到树中时被创建,当在重新构建时,如果 widget 被修改了,Flutter framework 会动态设置State,...State生命周期 initState() 当 Widget 第一次插入到 Widget树时被调用。对于每一个 State 对象,Flutter framework只会调用一次回调。

    97320

    Flutter 布局常用的 widgets(Common layout widgets)

    Container 小结: 添加 padding, margins, 和边界(borders) 能够更好背景颜色和图片 包含一个单独的子widget,这个子widget可以是Row、Column或一个widget...GridView 小结: 将多个widget放进一个表格中 当超出渲染范围时,自动提供滚动功能 可自定义格子,也可用下面提供的2种 GridView.count 指定列的数目 GridView.extent...当内容超过渲染范围时,自动提供滚动的功能。...Stack 小结: 用来在当前widget上面再盖上一层widget Stack children中的第一个widget放在最下,后面的widget会一层层盖上去 Stack的内容不支持滚动 可以裁剪超出范围的子...Card Card来自Material组件库,可包含一些数据,通常用ListTile来组装。Card只有一个子widget,可以是column、row、list、grid或其它组合widget。

    1.5K30

    Widget中的state到底是什么

    _imageInfo属性用来给Widget加载真实的图片,一旦State对象通过_handleImageChanged方法监听到_imageInfo属性发生了变化,就会立即调用_ImageState类的...StatelessWidget是静态的,一旦创建则无需更新;而对于StatefulWidget来说,在State类中调用setState方法更新数据,会触发视图的销毁和重建,也将间接地触发每个子Widget...这里你可能会有疑问,如果我在一个默认不可变的场景下使用StatefulWidget,那么我肯定不会主动调用其setState方法啊,如果我不主动调用setState,那么不就不会影响StatefulWidget...但是实际上,即使你不去主动setState,StatefulWidget在特定的时机也会rebuild的,这一点我在下一篇文章中会做详细介绍。...如果某个子Widget的重建涉及到一些耗时操作,那页面的渲染性能将会急剧下降。

    3.1K20

    Flutter 简易新闻项目目标效果对比简介代码代码地址

    目标 使用flutter快速开发 Android 和 iOS 的简易的新闻客户端 API使用的是 showapi(易源数据) 加载热门微信文章 效果对比 Android iOS image image...image image image image 简介 这是一个建议的新闻客户端 页面非常简单 通过网络请求加载 分类数据 和 分类详情数据 (key都在代码里了,轻量使用~) UI上几乎是没有任何特点...: ^0.1.6 #webview shared_preferences: ^0.4.2 #持久化数据 url_launcher: ^3.0.3 #调用系统浏览器...代码 使用单例来保存数据 由于分类原则上是没有变化的,我这里就使用单例来保存从API请求的分类数据,减少请求次数(API请求次数有限) class UserSinglen { List<WeType...Colors.white), )), ) ], ), body: new GridView.count

    1.4K20

    为Flutter应用程序添加交互性 顶

    小部件的状态存储在状态对象中,从而将小部件的状态与外观分开。 当小部件的状态改变时,状态对象调用setState(),告诉框架重绘小部件。 无状态小部件没有内部状态来管理。...当小部件的状态改变时,状态对象调用setState(),告诉框架重绘小部件。 在本节中,您将创建一个自定义有状态小部件。...定义_handleTap()函数,轻击框时该函数更新_active,并调用setState()函数来更新UI。 实现小部件的所有交互式行为。...实现_handleTapboxChanged(),当方块被点击时调用该方法。 当状态改变时,调用setState()来更新UI。...实现_handleTapboxChanged(),当方块被点击时调用该方法。 调用setState()以在发生轻击和_active状态改变时更新UI。

    4.6K20

    Widget的生命周期和渲染原理

    我们知道,在需要修改数据更新UI的时候,只要调用setState然后在其中更改数据,这样UI就可以随之改变了,这是因为setState函数可以触发widget的销毁重建,也就是会触发state的build...接下来我们看一下setState的源码: 可以看到,除了断言,这里面实际上就调用了一行代码: _element!....好,现在我们知道了通过setState来根据数据自动调整UI的原理了,因此,原则上我们是可以不调用setState而直接给element调用markNeedsBuild函数来实现UI的更新,即: 在StatefulWidget...8,dispose 当State对象被永久地从视图树中移除时,Flutter会调用dispose函数。...当创建了一个Widget之后,Flutter Framework必然会调用createElement创建Element对象并将其加入到Element树当中,之后Flutter Framework会接着调用

    1.4K20

    原来Flutter代码是这样运行在原生系统的!快来了解Flutter标准模板,感受原生系统中Flutter的魅力!

    Dart只要理解基本编程概念(比如,类型、变量、函数和面向对象),并具备一定前端基础(了解View是什么、页面基本布局等基础),就可以和我一起完成计数器示例工程分析 Android Studio创建Flutter...而Flutter框架收到通知后,会执行Widget#build,根据新状态重建界面。 状态的更改一定要配合使用setState。...通过该方法调用,Flutter会在底层标记Widget的状态,随后触发重建。示例即使修改_counter,若不调用setState,Flutter框架也不会感知到状态变化,因此界面也不会有任何改变。...在这个函数中,通过调用setState更新_counter属性同时,也通知Flutter框架其状态发生变化。...对StatefulWidget,当数据改变时,需重建Widget去更新界面,即Widget创建销毁会很频繁。

    68920

    Flutter | 基础Widget

    createElement():正如前文所述,一个 Widget 可以对应多个 Element,Flutter Framework 在构建 UI 树时,会先调用此方法生成对应节点的 Element 对象...例如,当一个 Stateful widget同时插入到 widget 树的多个未值日时,Flutter framework 就会调用该方法为每一个位置生成一个独立的 State 实例,其实,本质上就是一个...被改变时,可以手动调用 setState() 方法通知 Flutter framework 状态发生改变,flutter framework 收到消息后,会调用其 build 方法重新构建 widget...但 State 实例只会在第一次插入到树中时被创建,当在重新构建时,如果 widget 被修改了,flutter framework 会动态设置 state,widget 为最新的 widget 实例...典型的场景是当系统语言 Locale 或应用主题改变时, Flutter framework 会 调用 widget 进行回调 build() 主要是用来构建 Widget 子树的,会在如下场景被调用

    1.4K20

    带你轻松掌握Flutter 动画开发核心技能

    例如,当你掷球时,它在何处落地,取决于抛球速度有多快、球有多重、距离地面有多远。 类似地,将连接在弹簧上的球落下(并弹起)与连接到绳子上的球放下的方式也是不同。...在为widget添加动画之前,先让我们认识下动画的几个朋友: Animation:是Flutter动画库中的一个核心类,它生成指导动画的值; CurvedAnimation:Animation的一个子类...,将过程抽象为一个非线性曲线; AnimationController:Animation的一个子类,用来管理Animation; Tween:在正在执行动画的对象所使用的数据范围之间生成值。...Flutter中的Animation对象是一个在一段时间内依次生成一个区间之间值的类。Animation对象的输出可以是线性的、曲线的、一个步进函数或者任何其他可以设计的映射。...Tween.animate 要使用Tween对象,可调用它的animate()方法,传入一个控制器对象。例如,以下代码在500毫秒内生成从0到255的整数值。

    73110

    Flutter 入门指北之滑动部件(超详细)

    前面的小节基本上讲完了常用的部件和容器部件,也可以完成很多的界面,但是又一个问题,假如我们要显示一段文字,比如将 一段又臭又长的文字 在界面上显示 1000 次,不难完成吧 // ..省略一些无关代码...「诶诶诶,**,怎么只显示了一部分,剩下的怎么画不下去」 日常开发中,会遇到很多这种情况,许多界面不是一页就能够显示完的。...以上代码查看 listview_main.dart 文件 总结下:如果 item 的高度能够准确获取,一定要指定 itemExtent 的值,这样会更加高效,至于要通过哪种方式来生成,完全看个人喜好吧。...为了方便写法呢,Flutter 对以上的两种方式进行了封装,省略了 delegate GridView.count/GridView.extent 直接看下如何修改 // 这种情况简化了 `GridView...因为 GridView 和 ListView 亮着都是可滑动的部件,直接拼接肯定会有「滑动冲突」,所以 Flutter 就提供了一个粘合剂,CustomScrollView,那么 Flutter 如何实现呢

    2.7K30

    干货 | 携程火车票Flutter最佳实践

    跨平台方案能够节约一定开发、测试、运维成本。Flutter是由谷歌开源的跨平台框架,可以快速在 iOS 和 Android 上构建高质量的原生用户界面。...当在任一组件中改变了共享数据data,InheritedWidget组件会自上而下通知所有使用过共享数据的组件并刷新组件,同时会回调didChangeDependencies() 方法。...同时最好复写dispose()和notifyListeners()方法,防止用户在调用数据时销毁界面,而等到数据获取到以后通知界面刷新导致Crash。...当调用 setState() 时,RenderObject 就会往上的父节点去查找,根据 isRepaintBoundary是否为 true,会决定是否从这里开始往下去触发重绘,来确定要更新哪些区域。..._showCountDown = true; }); } } catch (e) {} } 3)处理办法 在调用setState()方法之前检查是否mounted

    2.5K30

    Flutter&鸿蒙next 布局架构原理详解

    一、Flutter 布局的基本概念在深入布局 Widget 之前,了解 Flutter 布局的基本概念非常重要。...布局原理在布局过程中,Row 接收来自父 Widget 的约束,并将其分发给每个子 Widget。根据设定的对齐方式,Row 会自动计算每个子 Widget 的位置。2....布局原理Stack 不会对子 Widget 的大小施加约束,所有子 Widget 都会被放置在同一位置上。可以使用 Positioned Widget 来设置子 Widget 的具体位置。4....children: [ ListTile(title: Text('Item 1')), ListTile(title: Text('Item 2')), ],)GridView 示例GridView.count...三、布局优化技巧在 Flutter 中,优化布局可以显著提高应用的性能,以下是一些常用的布局优化技巧:使用 const 构造函数:如果 Widget 不会变化,可以使用 const 构造函数来减少重建的开销

    18700
    领券