java.lang.Object
com.ultikits.ultitools.abstracts.gui.declarative.core.State<T>
Type Parameters:
T - 对应的 StatefulWidget 类型
Direct Known Subclasses:
NavigatorState

public abstract class State<T extends StatefulWidget> extends Object
State 是 StatefulWidget 的可变状态。

State 对象由框架管理,具有以下特性:

  • 在 StatefulWidget 插入树中时创建
  • 在 StatefulWidget 从树中移除时销毁
  • 在 StatefulWidget 重建时复用

生命周期:

  1. initState() - 初始化状态,只调用一次
  2. build(BuildContext) - 构建 UI,可能调用多次
  3. didUpdateWidget(StatefulWidget) - 配置变化时调用
  4. dispose() - 清理资源,只调用一次

使用示例:


 class CounterState extends State<CounterWidget> {
     private int count = 0;
     
     @Override
     void initState() {
         super.initState();
         // 初始化工作
     }
     
     @Override
     Widget build(BuildContext context) {
         return TextButton.builder()
             .text("Clicked: " + count)
             .onClick(() -> setState(() -> count++))
             .build();
     }
 }
 
Since:
6.2.0
Version:
1.0.0
Author:
UltiTools Team
  • Field Details

    • _widget

      @Nullable private T extends StatefulWidget _widget
    • _element

      @Nullable private @Nullable StatefulElement _element
    • _dirty

      private boolean _dirty
    • _mounted

      private boolean _mounted
  • Constructor Details

    • State

      public State()
      创建一个新的 State。
  • Method Details

    • getWidget

      @NotNull public T getWidget()
      获取与此 State 关联的 Widget。
      Returns:
      Widget 实例
      Throws:
      IllegalStateException - 如果 State 尚未挂载
    • isMounted

      public boolean isMounted()
      检查 State 是否已挂载到树中。
      Returns:
      如果已挂载则返回 true
    • setState

      public void setState(@NotNull @NotNull VoidCallback fn)
      标记 State 为 dirty,并安排重建。

      这个方法通知框架 State 对象已发生变化,需要重建 UI。 框架会在下一个帧中调用 build 方法。

      重要: 回调函数中应该只修改状态,不应该有副作用。

      使用示例:

      
       void handleClick() {
           setState(() -> {
               _counter++;  // 只修改状态
           });
       }
       
      Parameters:
      fn - 修改状态的回调函数
    • initState

      protected void initState()
      初始化状态。

      这个方法在 State 对象创建后、插入树中前调用,只调用一次。 可以在此订阅流、启动动画或执行其他一次性初始化工作。

      必须调用 super.initState()。

    • dispose

      protected void dispose()
      清理资源。

      这个方法在 State 对象从树中永久移除时调用,只调用一次。 必须在此取消订阅、停止动画或执行其他清理工作。

      必须调用 super.dispose()。

    • didUpdateWidget

      protected void didUpdateWidget(@NotNull T oldWidget)
      Widget 配置发生变化时调用。

      当父 Widget 重建并创建新的 StatefulWidget 实例时调用。 可以在此比较新旧 Widget 的属性,并相应地调整状态。

      Parameters:
      oldWidget - 旧的 Widget 实例
    • build

      @NotNull public abstract @NotNull Widget build(@NotNull @NotNull BuildContext context)
      构建此 State 的 UI。

      这个方法在以下情况会被调用:

      • initState 之后
      • didUpdateWidget 之后
      • setState 之后
      • 依赖的 InheritedWidget 变化时
      Parameters:
      context - 构建上下文
      Returns:
      Widget 树
    • setElement

      void setElement(@Nullable @Nullable StatefulElement element)
    • setWidget

      void setWidget(@NotNull @NotNull StatefulWidget widget)
    • setMounted

      void setMounted(boolean mounted)
    • isDirty

      boolean isDirty()
    • clearDirty

      void clearDirty()
    • didUpdateWidgetInternal

      void didUpdateWidgetInternal(@NotNull @NotNull StatefulWidget oldWidget)
      内部方法:调用 didUpdateWidget,使用原始类型避免泛型问题。