java.lang.Object
com.ultikits.ultitools.abstracts.gui.declarative.core.Widget
com.ultikits.ultitools.abstracts.gui.declarative.core.StatefulWidget
Direct Known Subclasses:
Navigator

public abstract class StatefulWidget extends Widget
StatefulWidget 是一个具有可变状态的 Widget。

它将 Widget 的配置(由构造函数参数决定)与状态(由 State 对象管理)分离。 当调用 State.setState(VoidCallback) 时,框架会安排重建, 使用新的 StatefulWidget 实例但保持相同的 State 对象。

适用场景:

  • 需要用户交互的 UI(按钮点击、表单输入)
  • 需要管理内部状态的 UI(展开/折叠、选中状态)
  • 需要订阅外部数据源的 UI(实时数据更新)

生命周期:

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

使用示例:


 public class CounterButton extends StatefulWidget {
     @Override
     public State<CounterButton> createState() {
         return new CounterState();
     }
 }

 class CounterState extends State<CounterButton> {
     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
See Also:
  • Constructor Details

    • StatefulWidget

      protected StatefulWidget()
      创建一个新的 StatefulWidget。
    • StatefulWidget

      protected StatefulWidget(SlotKey key)
      创建一个新的 StatefulWidget,指定 key。
      Parameters:
      key - 用于稳定标识此 Widget 的键
  • Method Details

    • createState

      @NotNull public abstract @NotNull State<? extends StatefulWidget> createState()
      创建与此 Widget 关联的状态对象。

      框架在首次插入 Widget 到树中时调用此方法。 同一个 State 对象会在 Widget 重建时复用。

      Returns:
      新的 State 实例
    • createElement

      @NotNull public @NotNull Element createElement()
      Description copied from class: Widget
      为此 Widget 创建对应的 Element。

      这是框架内部使用的方法,子类应该根据 Widget 类型返回适当的 Element 实现。

      Specified by:
      createElement in class Widget
      Returns:
      对应的 Element 实例