交互

有状态(stateful)和无状态(stateless)的小部件

  • 有些小部件是有状态的,有些是无状态的。

  • 如果一个小部件发生变化 - 用户与它进行交互,那么它是有状态的。

  • 小部件的状态由可以更改的值组成,例如滑块的当前值或复选框是否被选中。

  • 小部件的状态存储在状态对象中,从而将小部件的状态与外观分开。

  • 当小部件的状态改变时,状态对象调用 setState(),告诉框架重绘小部件。

创建一个有状态的(stateful)小部件

  • 要创建一个有状态的自定义小部件,需要创建两个类的子类:StatefulWidget 和 State。

  • 状态(state)对象包含小部件的状态和小部件的 build() 方法。

  • 当小部件的状态改变时,状态对象(state)调用 setState(),告诉框架重绘小部件。

实现一个定制的有状态小部件需要创建两个类:

  • 定义小部件的 StatefulWidget 的子类。

  • State 的一个子类,它包含该小部件的状态(state)并定义小部件的 build() 方法。

第1步:决定哪个对象管理小部件的状态
第2步:创建 StatefulWidget 子类

框架在它想要构建小部件时会调用 createState()方法。

第3步:创建 State 子类

自定义 State 类存储可变信息 - 可以在小部件的生命周期内改变的逻辑和内部状态。

状态对象还定义了构建方法。

第4步:将有状态小部件(stateful widget)插入小部件树(tree)中

管理状态(state)

  • 有不同的方式来管理状态。

  • 你作为小部件设计者,选择使用哪种方法。

  • 如果有疑问,首先在父部件里管理状态。

以下是管理状态的最常见方法:

  • 小部件管理自己的状态。
  • 父部件管理小部件的状态。
  • 混搭方法。

以下原则可以帮助您决定使用哪种方式:

  • 如果有问题的状态是用户数据,例如复选框的选中或未选中模式或滑块位置,则该状态最好由父控件管理。
  • 如果所讨论的状态是美学上的,例如动画,那么状态最好由小部件本身来管理。

如果有疑问,首先在父部件里管理状态。

results matching ""

    No results matching ""