didChangeDependencies() 在 initState() 之后调用,当 State 对象的依赖关系发生变化时,该方法被调用,初始化时也会调用。...dispose() Widget 销毁了,在调用这个方法之前,总会先调用 deactivate()。 didUpdateWidge 当 widget 状态发生变化时,会调用。...[flutter - 生命周期] 常见业务场景: 1.Widget A打开Widget B: 调用 Navigator.push(B) B构造函数--->B initState--->B didChangeDependencies...2、inactive界面退到后台或弹出对话框情况下, 即失去了焦点但仍可以执行drawframe回调;同安卓的onPause; 3、paused应用挂起,比如退到后台,失去了焦点且不会收到 drawframe...suspending, iOS中没用,安卓里就是挂起,不会再执行 drawframe 回调; 下面是生命周期: 1、初次打开widget时,不执行AppLifecycleState的回调; 2、按home键或Power
也能正常弹出。...来触发更新,所以在 didChangeDependencies 里调用 of(context) 有较好的因果关系。...那我能在 initState 里提前调用吗?...当然不行,首先如果在 initState 直接调用如 ScaffoldMessenger.of(context).showSnackBar 方法,就会看到以下的错误提示。...当然,如果你硬是想在 initState 下调用也行,增加一个 Future 执行就可以成功执行 @override void initState() { super.initState();
生命周期二:initState 「initState」 函数在组件被插入树中时被 Framework 调用(在 「createState」 之后),此函数只会被调用一次,子类通常会重写此方法,在其中进行初始化操作...❞ 生命周期三:didChangeDependencies didChangeDependencies 方法在 initState 之后由 Framework 立即调用。...调用 「deactivate」 之后,然后将 「State」 对象重新插入树的另一个位置。 此方法可以在每一帧中调用,此方法中应该只包含构建组件的代码,不应该包含其他额外的功能,尤其是耗时任务。...mounted 「mounted」 是 State 对象中的一个属性,此属性表示当前组件是否在树中,在创建 「State」 之后,调用 「initState」 之前,Framework 会将 「State...在iOS上,打电话、响应TouchID请求、进入应用程序切换器或控制中心都处于此状态。在Android上,分屏应用,打电话,弹出系统对话框或其他窗口等。
() { print("initState"); super.initState(); } 3、didChangeDependencies didChangeDependencies...方法后调用该方法 ; ② 调用 setState 方法之后 , 该方法也会被调用 ; 方法作用 : 页面每次渲染时都会调用该方法 ; /// 4....更新期的生命周期函数 /// 方法调用时机 : /// ① 调用完 didChangeDependencies 方法后调用该方法 /// ② 调用 setState 方法之后 , 该方法也会被调用...更新期的生命周期函数 /// 方法调用时机 : /// ① 调用完 didChangeDependencies 方法后调用该方法 /// ② 调用 setState 方法之后 , 该方法也会被调用..., 然后调用 didChangeDependencies 方法 , 最后调用 build 方法 ; I/flutter (21393): initState I/flutter (21393): didChangeDependencies
1.2.2 生命周期二:initState initState 函数在组件被插入树中时被 Framework 调用(在 createState 之后),此函数只会被调用一次,子类通常会重写此方法,在其中进行初始化操作...1.2.3 生命周期三:didChangeDependencies didChangeDependencies 方法在 initState 之后由 Framework 立即调用。...didChangeDependencies 方法调用后,组件的状态变为 dirty,立即调用 build 方法。...1.3.1 mounted mounted 是 State 对象中的一个属性,此属性表示当前组件是否在树中,在创建 State 之后,调用 initState 之前,Framework 会将 State...在iOS上,打电话、响应TouchID请求、进入应用程序切换器或控制中心都处于此状态。在Android上,分屏应用,打电话,弹出系统对话框或其他窗口等。
生命周期二:initState initState 函数在组件被插入树中时被 Framework 调用(在 createState 之后),此函数只会被调用一次,子类通常会重写此方法,在其中进行初始化操作...AlertDialog 在 didChangeDependencies 中调用也会出现异常,但和上面的异常不是同一个。...生命周期三:didChangeDependencies didChangeDependencies 方法在 initState 之后由 Framework 立即调用。...调用 deactivate 之后,然后将 State 对象重新插入树的另一个位置。 此方法可以在每一帧中调用,此方法中应该只包含构建组件的代码,不应该包含其他额外的功能,尤其是耗时任务。...mounted mounted 是 State 对象中的一个属性,此属性表示当前组件是否在树中,在创建 State 之后,调用 initState 之前,Framework 会将 State 和 BuildContext
initState 初始化 当此对象插入树中时调用,框架会调用一次此方法并不会再次重复执行, 如果[State]的[build]方法依赖于本身可以更改状态的对象,例如[ChangeNotifier]或[...Stream], 或者某些其他可以订阅的对象接收通知,可以在此方法订阅,但记得去dispose取消订阅; didChangeDependencies 依赖改变 顾名思义,依赖项更改时调用,但也会在initState...之后调用, 在这个方法调用[BuildContext.inheritFromWidgetOfExactType]是安全的。...build 构建 会在以下场景调用: initState()之后; didUpdateWidget()之后; setState()之后。 didChangeDependencies()之后。...State对象从树中一个位置移除后会调用deactivate,然后又重新插入到树的其它位置之后。
在 State 的生命周期中只会被调用一次,因此可以在 initState 函数中做一些初始化操作 didChangeDependencies:专门用来处理 State 对象依赖关系变化,会在...initState() 调用结束后调用 build:构建视图。...经过构造方法、initState、didChangeDependencies 后,Framework 认为 State 已经准备就绪,于是便调用 build。...State 对象依赖关系发生变化的典型场景:系统语言 Locale 或应用主题改变时,系统会通知 State 执行 didChangeDependencies 回调方法 didUpdateWidget...:Widget 的配置发生变化时,或热重载时,系统会回调该方法 一旦这三个方法被调用,Flutter 随后便会销毁旧的 Widget,并调用 build 方法重建 Widget 销毁
Row, Column- 这些小部件显示水平或垂直方向的子项列表。 Stack - 堆栈显示一个孩子的列表。这个功能很像CSS中的'position'属性。...注意:如果您熟悉基于组件的框架(如React或Vue),则可能不需要阅读此内容。Widget就是组件。 封装组件 这样的话,实际开发中,也是通过不断对组件的封装,来提高工作效率。....` to make sure the State exists before calling `setState() 3 . initState() 这个方法只会调用一次,在这个Widget被创建之后...((data) { _updateWidget(data); }); } 4. didChangeDependencies() 它是在initState 方法后,就会调用。...文档还建议,当InheritedWidget更新时,如果需要进行网络调用(或任何其他昂贵的操作),它可能会很有用。 5.build() 这个方法会经常被调用。
initState 初始化: 当此对象插入树中时调用,框架会调用一次此方法并不会再次重复执行, 如果 State 的 build 方法依赖于本身可以更改状态的对象,例如:ChangeNotifier...或 Stream, 或者某些其他可以订阅的对象接收通知,可以在此方法订阅,但记得去 dispose 取消订阅。...didChangeDependencies 依赖改变: 顾名思义,依赖项更改时调用,但也会在 initState 之后调用, 在这个方法调用 BuildContext.inheritFromWidgetOfExactType...build 构建: 会在以下场景调用: initState() 之后。 didUpdateWidget() 之后。 setState() 之后。...didChangeDependencies() 之后。 State 对象从树中一个位置移除后会调用 deactivate,然后又重新插入到树的其它位置之后。
,对于每一个 State 对象,Flutter framework 只会调用一次该回调,所以通常在该回调中做一些一次性的操作,如状态初始化,订阅子树的时间通知等 不能再回调中调用 BuildContext.dependOnInheritedWidgetOfExactType...didChangeDependencies() 当 State 对象依赖发生变化时会被调用 例如:build 中包含了一个 InheritedWidget,在之后的 build 中 InheritedWidget...典型的场景是当系统语言 Locale 或应用主题改变时, Flutter framework 会 调用 widget 进行回调 build() 主要是用来构建 Widget 子树的,会在如下场景被调用...1,在调用 initState 之后 2,在调用 didUpdateWidget() 之后 3,在调用 setState() 之后 4,在调用 didChangeDependencies()...之后 5,在 State 对象树中一个位置移除后(会调用 deactivate) 又重新插入到树的其他位置之后 reassemble() 此回调是专门为了开发调试而提供的,在热重载(hot
初始化 initState -> didChangeDependencies -> build ? 2....打开新的页面 新页面initState -> didChangeDependencies -> build -> 旧页面deactivate -> didChangeDependencies -> build...在整个生命周期中的初始化阶段只会调用一次; didChangeDependencies 当 State 对象依赖发生变动时调用; didUpdateWidget 当 Widget 状态发生改变时调用;...实际上每次更新状态时,Flutter 会创建一个新的 Widget,并在该函数中进行新旧 Widget 对比;一般调用该方法之后会调用 build; reassemble 只有在 debug 或 热重载...时调用; deactivate 从 Widget Tree 中移除 State 对象时会调用,一般用在 dispose 之前; dispose 用于 Widget 被销毁时,通常会在此方法中移除监听或清理数据等
State 对象依赖关系发生变化的典型场景:系统语言 Locale 或应用主题改变时,系统会通知 State 执行 didChangeDependencies 回调方法 void didChangeDependencies...、didChangeDependencies和build。...如“page1 initState” ?...生命周期 调用次数 调用时间 createState 1 组件创建时 initState 1 组件创建时 didChangeDependencies >=1 组件创建或状态发生变化 build >=1...正在进行执行 initialized表示State.initState已经执行,State.didChangeDependencies方法正在执行 ready表示State已经完成构建 defunct表示
创建 State 初始化时,会依次执行:构造方法 -> initState -> didChangeDependencies -> build,随后完成页面渲染。...我们可以通过初始化方法,接收父Widget传递过来的初始化UI配置参数,这些配置参数决定了Widget的最初配置效果 initState,会在State对象被插入视图树的时候调用,这个函数在State的生命周期中只会被调用一次...didChangeDependencies,则用来专门处理State对象依赖关系变化,会在initSate()调用结束后被Flutter调用。 build,作用是构建视图。...比如组件被移除,或是页面销毁的时候,系统会调用diactivate和dispose这两个方法,来移除或销毁组件。...帧绘制回调 除了需要监听APP的生命周期回调做相应的处理之外,有时候我们还需要在组件渲染之后做一些与显示安全相关的操作。
尝试二: 将出问题的插件版本更换为 any,如:json_annotation: any; Package get 更新插件,自动匹配; 在 pubspec.lock 文件中找到问题插件,系统会自动匹配安全版本...问题二:新页面初始化对话框失败 和尚因需求,准备打开新的页面时先弹出对话框供用户选择,和尚在 initState 方法初始化,但一直提示页面未初始化,弹框位置错误; ?...尝试一: 和尚根据错误提示将弹窗位置调整到 didChangeDependencies 和 build 中且异步尝试,同样失败,提示需要父类组件构建成功之后才可以构建子组件; ?...,同时可以获取元素大小;且整个生命周期只会执行一次; WidgetsBinding widgetsBinding = WidgetsBinding.instance; @override void didChangeDependencies...() { super.didChangeDependencies(); widgetsBinding.addPostFrameCallback((callback) { showDialog
它既可以表示UI元素(如:Text / Image / Row / Column),也可表示功能性的组件(如:GestureDetectorWidget - 手势检测 / Theme - 数据传递) Widget...State 的生命周期 initState:当前 widget 对象插入 widget树中时调用 didChangeDependencies:当前 State 对象的依赖项发生变化时调用 build:绘制当前界面布局时调用...void 当前 widget 对象从 widget 树中永久删除时调用 / Called when this object is removed from the tree permanently. initState...() { super.didChangeDependencies(); print("State 更改 - didChangeDependencies"); } } 首次运行时 I.../flutter (28866): State 创建 - initState I/flutter (28866): State 更改 - didChangeDependencies I/flutter
方法会被调用; initialized:当State对象被创建,但还没有准备构建时,State.didChangeDependencies在这个时候会被调用; ready:State对象已经准备好了构建...,State.dispose没有被调用的时候; defunct:State.dispose被调用后,State对象不能够被构建。...super(widget) { ... ... } 然后此时 State 的状态为 create 状态 ,需要注意的是此时 是在 StatefulElement 的构造函数中执行的,之后会在..._element = this; ... } 之后 State 的状态 更新 为 initialized 状态,然后回调 didChangeDependencies , initialized...之后 State 的状态 更新 为 ready 状态 ,当前(StatefulElement)回调父类(ComponentElement)的 _firstBuild 方法 ,在 ComponentElement
created, /// State.initState方法虽然被调用了,但是State对象还没有构建完毕。 这时候会调用State.didChangeDependencies方法....接下来,flutter会调用State中的 initState方法。...然后flutter框架会调用state的didChangeDependencies方法。什么时候会去调用这个方法呢?根据flutter的说法,当State依赖的对象发生变化的时候就会调用。...这个时候flutter就会调用didChangeDependencies方法。...注意,flutter框架会在调用didUpdateWidget之后自动调用build方法,所以我们在写程序的过程中,注意不要重复调用。
如果当前State不是在mounted == true的状态,你去调用setState()是会crash的。 函数initState()用来初始化State。...后续我会在另外的文章里从这个点出发,给大家说说渲染流水线如何在Widget、Element和RenderObject架构下运行。...在函数_firstBuild()里会调用State.initState()和State.didChangeDependencies()。...在函数didChangeDependencies()里会调用State.didChangeDependencies()。...标记之后Flutter框架会调度一帧,在下一个Vsync信号到来之后才真正做布局和绘制。 真正的布局在函数layout()中进行。这个函数会做一次判断,如果sizedByParent为true。
领取专属 10元无门槛券
手把手带您无忧上云