java.lang.Object
com.ultikits.ultitools.abstracts.gui.declarative.core.Widget
com.ultikits.ultitools.abstracts.gui.declarative.core.StatelessWidget

public abstract class StatelessWidget extends Widget
StatelessWidget 是一个不需要可变状态的 Widget。

它完全依赖于构造时传入的配置参数来构建 UI。 当配置变化时,会创建新的 StatelessWidget 实例, 框架会自动 diff 并更新必要的部分。

适用场景:

  • 纯展示性 UI(如标题、图标、静态文本)
  • 完全由父 Widget 控制状态的 UI
  • 没有副作用的纯函数式组件

使用示例:


 public class ItemRow extends StatelessWidget {
     private final ItemStack item;
     private final String name;
     private final Runnable onClick;
     
     public ItemRow(ItemStack item, String name, Runnable onClick) {
         this.item = item;
         this.name = name;
         this.onClick = onClick;
     }
     
     @Override
     public Widget build(BuildContext context) {
         return Row.builder()
             .children(
                 ItemDisplay.builder(item).build(),
                 TextButton.builder()
                     .text(name)
                     .onClick(onClick)
                     .build()
             )
             .build();
     }
 }
 
Since:
6.2.0
Version:
1.0.0
Author:
UltiTools Team
See Also:
  • Constructor Details

    • StatelessWidget

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

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

    • build

      @NotNull public abstract @NotNull Widget build(@NotNull @NotNull BuildContext context)
      构建此 Widget 的子树。

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

      • Widget 首次被创建时
      • 父 Widget 重建时
      • 依赖的数据发生变化时

      重要: build 方法应该是纯函数,不应该有副作用。 不要在 build 中修改状态、执行 I/O 操作或注册监听器。

      Parameters:
      context - 构建上下文,包含玩家、GUI 配置等信息
      Returns:
      子 Widget 树
    • createElement

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

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

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