• 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的状态;
  • 相关阅读:
    237. 删除链表中的节点
    牛客网-第一场-J-Fraction Comparision
    1. 两数之和
    CCF-201903-1大中小
    学习Python
    Convert Sorted Array to Binary Search Tree
    3-1
    Merge Sorted Array
    Climbing Stairs
    Add Binary
  • 原文地址:https://www.cnblogs.com/qianyindichang/p/11023247.html
Copyright © 2020-2023  润新知