首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

flutter源码:setState分析

setState方法算是flutter使用最频繁的方法了,每次页面数据有改变,都需要调用这个方法,去触发页面的刷新,展示最新的UI效果,接下来从源码角度解读下setState后具体发生了什么 系统源码部分...,会做截取,仅保留跟主题有关的部分,开始吧 void setState(VoidCallback fn) { // 省略了一大堆的判断代码 final Object?...scheduleBuildFor(this); } 就是把这个element标记为dirty,如果已经标记过,则忽略,说明连续调用两次setState方法,第二次其实是多余的,然后是调用owner...方法,然后又回调到StatefulElement的build方法 Widget build() => state.build(this); 最终触发的地方,就是在这里了 总结 setState其实就是告诉系统...,在下一帧刷新的时候,需要更新当前widget,整个过程,是一个异步的行为,所以下面的三个写法,效果上是一样的 // 写法一 _counter++; setState(() {});

60210

Flutter | 启动,渲染,setState 流程

前言 用了这么久 Flutter 了,居然都不知道他的启动过程,真的是学之有愧啊,今天我们来分析一下 Flutter 的启动流程,以及他的渲染过程,对其做一个简单的剖析。...下面我们以 setState 的更新流程为例先对整个更新流程有一个比较深的印象。 setState 执行流 void setState(VoidCallback fn) { assert(fn !...这也侧面说明如果你频繁的 setState 的时候,如果上次的渲染流程没有完成,则不会发起新的渲染。...到此,setState 中最核心的就是触发了一个 请求,在下一次屏幕刷新的时候就会回调 onBeginFrame,执行完成之后才会调用 onDrawFrame 方法。...上屏,会将绘制出的bit数据发送给GPU .....///// } } 复制代码 以上,便是 setState 调用的大概过程,实际的流程会更加复杂一点,例如在这个过程中不允许再次调用 setState

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

    Flutter 的状态管理方案:setState、BLoC、ValueNotifier、Provider

    这是 Flutter SDK 中 ValueNotifier 的实现: /// A [ChangeNotifier] that holds a single value. /// /// When [value...最后的比较 上述三种实现(setState、BLoC、ValueNotifier)非常相似,只是处理加载状态的方式不同。...如下是他们的比较方式: setState ↔︎ 最精简的代码 BLoC ↔︎ 最多的代码 ValueNotifier ↔︎ 中等水平 所以 setState 方案最适合这个例子,因为我们需要处理单个小部件的各自的状态...这样,即使删除使用它的小部件,状态也会被保留。 ValueNotifier 比 setState 需要更多的代码。但它可以用来记住状态,通过在 widget 树中放置适当的 Provider。...Flutter & Firebase Udemy 课程中有深入介绍。

    4.6K00

    告别setState()! 优雅的UI与Model绑定 Flutter DataBus使用~

    Flutter开发中,大家都绕不开Widget的刷新,setState()是最简单的用法。...但随着当app的交互变得复杂,setState出现的次数便会显著增加,每次setState都会重新调用build方法,这势必对于性能以及代码的可阅读性带来一定的影响。...如何优雅的解决这个问题,不得不提到StreamBuilder,StreamBuilder是Flutter中异步构建的核心组件。许多著名的开源框架例如Bloc皆是基于此实现。...img 采用setState()的方式,我们知道很简单,建立本地变量key1,key2,然后放入对应的Text中直接展示。...img 但当我刷新Key1的时候, 会同时重构Key2展示的两个Text,即使我的key2没有发生变化,显然这不是一种合理的做法。

    2.5K41

    Flutter小课堂:Text知多少

    Flutter小课堂开课了,今天的主角是Text,文字和图片几乎统治了我们的整个视觉世界 今天将带你了解一下Flutter中Text的一些属性及用法 1.简单使用 可以通过工具栏开启,显示文字基线..., ); var text=Text("toly-张风捷特烈-1994`"); 2.Text的style属性 2.1:常用属性 style对应的是TextStyle对象,常用的几个属性如下 var...= Text("toly-张风捷特烈-1994`",style: style,); 可见文字到了容器的边上会自动换行。...:文字阴影:shadows属性 一开始看到shadows是一个List感觉这嵌套的有点深啊 Shadow又是个没见过的类,并存在Flutter要啥给啥,没啥造啥的世界真理,造一个对象呗...可以看出不同字体的基线是不同的,如果多种字体同时出现,未免会造成差别 使用统一的strutStyle可以让基线统一的同时又能保持字体的不同,大概就这个意思吧 var text =Text( "

    57620

    Flutter组件学习(一)—— Text组件

    序言 之前说会给大家一一讲解 Flutter 中的组件,今天咱们就从 Text 组件开始,无图言X,先上图: ?...Text组件的API 我们先来看一下 Text 组件的构造方法 1class Text extends StatelessWidget { 2 const Text(this.data, {...= null), 29 data = null, 30 super(key: key); 31} 构造方法有两个,一个是默认的 Text 样式,一个是现实丰富 Text.rich 样式...,这样解释大家应该能猜得到就和 Android 中的 SpannableString 一样,下面来看一下 Text 组件的一些 API : API名称 功能 textAlign 文本对齐方式(center...,在 Flutter 中,并不是每个 Widget 都有点击事件,比如 Text 就没有,这时候你需要用一个 GestureDetector 组件包住 Text 组件,然后实现它里面的 onTap()

    1.6K20

    【- Flutter 性能 -】都 2021 年了,你的动画还在用 setState ?

    其根本原因是在较高的层级进行了 setState ,导致其下树被遍历,在这种情况下执行动画,是不可取的。我们需要做的是降低更新元素节点层级。...Flutter 为我们提供了 AnimatedBuilder。 ? ? ---- 3....更新还是要靠 setState。但比起上面的那个setState ,这里的 setState 的影响就小很多。...---- 这样来看,AnimatedBuilder 似乎也没有什么神秘的,了解了这些,再去看 Flutter 框架中的封装的各种动画组件,你就会豁然开朗,这便是知一而通百。...总结一下,并不是说 setState 不好,而是用的时机对不对。AnimatedBuilder 本质上也是使用 setState 进行触发更新的,所以看待问题不要片面和激进。

    1K20

    【 Flutter 极限测试】连续 1000000 次 setState 会怎么样

    测试描述 可能很多人会认为,每次的 State#setState 都会触发当前状态类的 build 方法重新构建。但真的是这样吗,你真的了解 Flutter 界面的更新流程吗?...另外,本文有对应的视频版,可在 哔哩哔哩 进行观看: 【Flutter极限测试 - 连续 setState 1000000 次会怎么样?...】 1、测试代码说明 如下所示,在默认案例基础上添加了两个蓝色文字,点击时分别触发如下的 _increment1 和 _setState1000000 。...这里 1121 行的 fn() 做了什么,不用多说了吧。就是 setState 入参的那个自加方法。...总的来说, State#setState 的核心作用就是把持有的元素标脏并申请新帧调度。而只有新帧到来,执行完构建之后,元素的 dirty 才会置为 false 。

    69130

    Flutter之UI布局与控件之Text

    其实是我看了Flutter中文官网,结果到组件里面在点就跳到英文文档去了,所以自己记录一下 Text Widget 属性 textAlign 设置文字对齐方向 TextAlign.center 居中对齐...TextAlign.left 居左对齐 TextAlign.right 居右对齐 maxLines 允许最大行数 overflow 设置文字显示形式 TextOverflow.ellipsis 超过的显示为...TextOverflow.clip 超过的不显示 TextOverflow.fade 从上到下颜色渐变 style 设置样式 TextStyle fontSize 字体大小 color 字体颜色 decoration...下划线 decorationStyle下划线样式 最后贴一下例子代码,可以照着敲一遍 import 'package:flutter/material.dart'; void main() =>...Widget', home: Scaffold( body: Center( child: Text( '这里我们来介绍一下Text

    49120
    领券