发布于 2026-01-06 5 阅读
0

Widget 的旅程:理解 Flutter Widget 的生命周期 Flutter Widget 的七个周期

Widget 的旅程:了解 Flutter 中的生命周期

Flutter 中的 Widget 生命周期

StatefulWidget 的七个周期

在 Flutter 中,组件(widget)具有生命周期,它决定了组件的创建、更新和销毁方式。理解组件生命周期对于管理状态、实现副作用以及优化 Flutter 应用至关重要。让我们深入了解一下 Flutter 中的组件生命周期:

小部件生命周期

Flutter 中的 Widget 生命周期

建造

当你通过调用构造函数来实例化一个控件时,该控件就会被创建。在构造过程中,你通常需要提供所有必需的参数并初始化控件的状态。构造函数会为控件的每个实例调用一次。

初始化

构建完成后,框架会调用组件对应 State 对象的 initState() 方法。在这里,您可以执行任何需要组件访问其 BuildContext 的初始化任务。您可以初始化变量、订阅流、设置监听器以及执行其他设置任务。

建造

每当需要渲染或更新组件时,都会调用 `build()` 方法。此方法返回一个组件树,其中描述了基于组件当前状态的 UI 外观。框架会在组件初始状态时调用 `build()`,之后每当组件状态发生变化或其父组件请求重建时,都会调用 `build()`。

州情更新

当组件的状态因用户交互、数据更改或其他事件而改变时,框架会调用组件的 State 对象的 setState() 方法。这将触发组件的重建,导致框架再次调用 build() 方法。通过调用 setState(),您可以发出组件状态已更改的信号,并需要在 UI 中反映出来。

重建

当框架确定某个组件需要重建时,它会调用 `build()` 方法来获取新的组件树。新组件树会与之前的组件树进行比较,框架会应用必要的 UI 更新来反映这些变化。重建过程非常高效,因为 Flutter 使用差异比较算法来确定更新 UI 所需的最小更改。

停用

如果某个组件从组件树中移除,但之后可能还会添加回来,框架会调用该组件的 State 对象的 deactivate() 方法。此方法允许组件清理不再需要的资源,同时保留其状态。例如,您可以暂停动画、取消订阅或释放资源。

处理

当一个组件从组件树中永久移除时,框架会调用该组件状态对象的 `dispose()` 方法。这是组件释放资源、取消订阅或执行任何清理任务的最后机会。调用 `dispose()` 后,该组件及其状态将不再可用。

需要注意的是,Flutter 中的组件是不可变的。当组件的状态发生变化时,Flutter 会重建组件树,创建一组具有更新状态的新组件。这种方法可以实现高效的 UI 更新,并有助于保持声明式编程风格。

了解组件生命周期,可以让你适当地管理状态、处理异步操作,并通过最大限度地减少不必要的重建和资源使用来优化 Flutter 应用的性能。

Flutter Widget 生命周期

StatefulWidget 的七个周期

Flutter 中有状态组件的生命周期由七个周期组成。理解这些周期对于管理状态和控制组件的行为至关重要。让我们逐一了解每个周期:

  • `createState()`:此方法是必需的,它会为控件创建一个 State 对象。该对象保存了该控件的所有可变状态。通过将 `mounted` 属性设置为 `true`,可以将 State 对象与 `BuildContext` 关联起来。

  • `initState()`:此方法在控件插入到树状结构后自动调用。它仅在首次创建状态对象时执行一次。使用此方法初始化变量和订阅数据源。

  • didChangeDependencies():框架会在 initState() 之后立即调用此方法。当组件所依赖的对象发生更改时,也会调用此方法。可以使用此方法处理依赖项的更改,但由于 build 方法总是在此之后调用,因此很少需要使用此方法。

  • `build()`:此方法是必需的,在生命周期中会被多次调用。它会在 `didChangeDependencies()` 之后以及每当需要重建控件时调用。在此方法中更新控件的 UI。

  • didUpdateWidget():当父组件的配置发生更改并需要重新构建组件时,将调用此方法。它接收旧组件作为参数,以便将其与新组件进行比较。使用此方法可以处理组件配置的更改。

  • setState(): setState() 方法通知框架小部件的内部状态已更改,需要更新。每当您修改状态时,请使用此方法触发小部件 UI 的重建。

  • deactivate():当控件从控件树中移除,但在当前帧更改完成之前可以重新插入时,将调用此方法。此方法可用于任何清理或暂停正在进行的操作。

  • dispose():当 State 对象从组件树中永久移除时,将调用此方法。使用此方法可以清理资源,例如数据监听器或关闭连接。

执行顺序

方法执行后dispose(),State 对象已从组件树中移除,并且 mounted 属性被设置为 false。该 State 对象无法重新挂载。

了解这些生命周期有助于管理状态变化、处理依赖关系以及在有状态小部件中有效地更新 UI。

注意:构造函数不属于生命周期的一部分,因为在此期间小部件属性的状态为空。

现在您已经全面了解了 Flutter 中的 widget 生命周期,您可以利用它的强大功能来创建强大而高效的 Flutter 应用程序。

文章来源:https://dev.to/pranjal-kumar/the-journey-of-a-widget-understanding-the-lifecycle-in-flutter-3plp