zoukankan      html  css  js  c++  java
  • flutter之Widget

    在flutter中,widget分为StatelessWidget和StatefulWidget,即无状态和有状态。

    状态:在构建widget时可以同步读取的信息,或者在widget的生命周期中可能更改的信息。

    StatelessWidget

    StatelessWidget是不需要状态更改的,即没有要管理的内部状态。

    使用场景如:当用户界面不依赖于对象本身的配置信息,以及widget的BuildContext时

    StatelessWidget的子类:AboutDialog,CircleAvator和Text

    StatelessWidget的build方法通常只会在以下三种情况调用

    • 将widget插入树中
    • widget父类更改其配置
    • 依赖的InheritedWidget发生变化时

    StatefulWidget

    StatefulWidget是可变状态的widget,使用setstate方法管理StatefulWidget的状态的改变,通过这个方法通知flutter框架某个状态发生了变化,然后调用build方法,获得最新状态。

    状态是在构建widget时可以同步读取的信息可能会在widget的生命周期中发生变化。确保在状态在改变时及时通知状态变化是widget实现者的责任。当widget动态更改时,需要使用StatefulWidget。

    使用场景如:通过键入表单或移动滑块来更改widget的状态,或随时间变化,或数据推送更新UI

    StatefulWidget的子类:Checkbox,Radio,Slider,InkWell,Form,TextField

    使用StatefulWidget,需要调用createState()方法创建StatefulWidget对象,这个对象要实现widget的build()方法,当状态改变时,需要调用setstate方法,使flutter框架在UI中重建widget。

    使用区分

    如果用户交互或数据改变导致widget改变,则为有状态的,

    如果一个widget是最终的或不可变的,那么它就是无状态。

    管理状态的三种方式

    • 每个widget管理自己的状态
    • 父widget管理自己的状态
    • 混合搭配管理的方法

    决定使用哪种方式

    • 如果所讨论的状态是用户数据,例如复选框的已选中和未选中状态,或滑块的位置,则状态最好由父widget管理;
    • 如果widget的状态取决于动作,例如:动画,最好有自身管理;
    • 如果不确定谁管理状态,最好由父widget管理子widget的状态;
  • 相关阅读:
    今天面试一些程序员(新,老)手的体会
    UVA 10635 Prince and Princess
    poj 2240 Arbitrage
    poj 2253 Frogger
    poj 2485 Highways
    UVA 11258 String Partition
    UVA 11151 Longest Palindrome
    poj 1125 Stockbroker Grapevine
    poj 1789 Truck History
    poj 3259 Wormholes
  • 原文地址:https://www.cnblogs.com/qianyindichang/p/11023247.html
Copyright © 2011-2022 走看看