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

flutter源码:setState分析

setState方法算是flutter使用最频繁的方法了,每次页面数据有改变,都需要调用这个方法,去触发页面的刷新,展示最新的UI效果,接下来从源码角度解读下setState后具体发生了什么 系统源码部分...didChangeDependencies = false; } super.performRebuild(); } 然后调用super的performRebuild方法,然后又回调到StatefulElement的build...方法 Widget build() => state.build(this); 最终触发的地方,就是在这里了 总结 setState其实就是告诉系统,在下一帧刷新的时候,需要更新当前widget,整个过程...,是一个异步的行为,所以下面的三个写法,效果上是一样的 // 写法一 _counter++; setState(() {}); // 写法二 setState(() {..._counter++; }); // 写法三 setState(() {}); _counter++;

60210

Flutter | 启动,渲染,setState 流程

下面我们以 setState 的更新流程为例先对整个更新流程有一个比较深的印象。 setState 执行流 void setState(VoidCallback fn) { assert(fn !...这也侧面说明如果你频繁的 setState 的时候,如果上次的渲染流程没有完成,则不会发起新的渲染。...注释2:flutter framework 想 Flutter Engine 发起一个请求,接着 Flutter 引擎会在合适的时机去调用 onBeginFrame 和 onDrawFrame。...到此,setState 中最核心的就是触发了一个 请求,在下一次屏幕刷新的时候就会回调 onBeginFrame,执行完成之后才会调用 onDrawFrame 方法。...上屏,会将绘制出的bit数据发送给GPU .....///// } } 复制代码 以上,便是 setState 调用的大概过程,实际的流程会更加复杂一点,例如在这个过程中不允许再次调用 setState

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

    Flutter的setState更新原理和流程

    分析 Flutter状态类: StatelessWidget:无状态类,没有状态更新,界面一经创建无法更改; StatefulWidget:有状态类,当状态改变,调用setState()方法会触发StatefulWidget...也就是只有当我们的类是有状态类的时候才能进行状态刷新,setState也是在State(有状态类)类里 解析 :framework.dart文件State类 调用 setState() 必须是没有调用过...if (mounted) { setState(() {}); } setState方法 void setState(VoidCallback fn) { ......_element.markNeedsBuild(); } setState方法除了一些条件判断就是:_element.markNeedsBuild();那我们看看markNeedsBuild。...阶段触发的微任务(Microtasks) persistentCallbacks WidgetsBinding.drawFrame 和 SchedulerBinding.handleDrawFrame 过程,build

    80920

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

    setState 加载状态可以经过以下流程,添加到刚刚的实现中: 将我们的 widget 转化为 StatefulWidget 定义一个局部 state 变量 将该 state 放进 build 方法中...这是 Flutter SDK 中 ValueNotifier 的实现: /// A [ChangeNotifier] that holds a single value. /// /// When [value...如下是他们的比较方式: setState ↔︎ 最精简的代码 BLoC ↔︎ 最多的代码 ValueNotifier ↔︎ 中等水平 所以 setState 方案最适合这个例子,因为我们需要处理单个小部件的各自的状态...Flutter & Firebase Udemy 课程中有深入介绍。...这可以通过此链接进行了解(点这个链接有折扣哦): Flutter & Firebase: Build a Complete App for iOS & Android 祝你代码敲得开心!

    4.6K00

    当永恒的软键盘问题遇到Flutter

    那么使用 Flutter 的时候,遇到软键盘出来的时候又会遇到什么问题呢?最近在练习使用 Flutter,顺便撸个自己的 APP,遇到了这个问题,把自己的实践顺便拿出来分享一下。.../ scaffold, the body can be resized to avoid overlapping the keyboard, which /// prevents widgets inside...final ValueChanged heightChange; final ValueChanged initHeight; @override Widget build...Flutter 因为是响应式的布局开发,和 Android 这种命令式开发一个很大的区别就是基本避免直接操作一个 ui 的元素,这时候会遇到 2 个问题 如何获取宽高 build的时候元素还没渲染完毕,....size.height 虽然 build 的时候我们无法判断宽高,但是我们可以监听渲染完毕的时候。

    3.7K30

    Flutter Widget框架之旅 顶

    (() { // This call to setState tells the Flutter framework that // something has changed...If we changed _counter without calling // setState(), then the build method would not be called...在Flutter中,这两种类型的对象具有不同的生命周期。 小部件是临时对象,用于构建当前状态下的应用程序演示文稿。 另一方面,State对象在调用build()之间是持久的,允许它们记住信息。...(() { // When user changes what is in the cart, we need to change _shoppingCart // inside...如果您在修改窗口小部件的内部状态时忘记调用setState,则框架将不知道您的窗口小部件是脏的,并且可能不会调用窗口小部件的build函数,这意味着用户界面可能不会更新以反映已更改的状态。

    6.7K20

    StatefulWidget与State

    (26863): page1 build 当我们进入第二个界面时 I/flutter (26863): page2 initStateI/flutter (26863): page2 didChangeDependenciesI.../flutter (26863): page2 build 当我们从第二个界面返回时 I/flutter (26863): page2 deactivateI/flutter (26863): page2...dispose 最后我们在第一个界面尝试下热更新 I/flutter (26863): page1 reassembleI/flutter (26863): page1 build 下面是相关生命周期的调用次数...在开始了解setState方法之前我们还需要来了解下一个枚举类_StateLifecycle,它是flutter中的一个私有类,用来表示State的生命周期。...小结 StatefulWidget是由状态组建,我们可以使用setState方法来重新构建组建 StatefulWidget的Wdiget是通过State的Build方法构建的 setState方法将要重新构建的

    1.4K10

    Flutter State生命周期

    2.2.1实测 写个有状态类并混入WidgetsBindingObserver配合监听特殊状态及其一个按钮,调用setState, 给生命周期的方法新增打印: import 'package:flutter...(fn) { super.setState(fn); print('状态刷新 setState'); } @override Widget build(BuildContext...点击按钮打印: I/flutter (16141): 状态刷新 setState // count也+1了,说明重新调用过build。...2.2.2流程图 图解主要部分: 1.构建(build); 2.如果用户调用了setState时则状态刷新,重新build; 3.如果销毁先停用然后dispose销毁再结束; 构造函数 构造函数不属于生命周期...build 构建 会在以下场景调用: initState()之后; didUpdateWidget()之后; setState()之后。 didChangeDependencies()之后。

    85020

    【Flutter】Animation 动画 ( Flutter 动画基本流程 | 创建动画控制器 | 创建动画 | 设置值监听器 | 设置状态监听器 | 布局中使用动画值 | 动画运行 )

    方法 : 动画如果生效, 必须在监听器中调用 setState 方法 , 以便重新调用 build 方法进行布局渲染 , 否则 UI 界面不会刷新 ; " 设置值监听器 " 代码示例 : //...方法 ..addListener(() { /// 调用 setState 方法后, 更新相关状态值后, 自动调用 build 方法重构组件界面 setState((...方法 : 动画如果生效, 必须在监听器中调用 setState 方法 , 以便重新调用 build 方法进行布局渲染 , 否则 UI 界面不会刷新 ; " 设置状态监听器 " 代码示例 : /...build 方法重构组件界面 setState(() { /// 获取动画状态 animationStatus = status; });...方法 ..addListener(() { /// 调用 setState 方法后, 更新相关状态值后, 自动调用 build 方法重构组件界面 setState((

    1.4K40
    领券