java.lang.Object
com.ultikits.ultitools.abstracts.gui.declarative.core.Widget
Direct Known Subclasses:
Container, GridView, RenderObjectWidget, StatefulWidget, StatelessWidget

public abstract class Widget extends Object
Widget 是声明式 UI 框架的核心抽象类。

Widget 是不可变的、轻量级的配置对象,用于描述 UI 的一部分。 每次状态变化都会创建新的 Widget 实例,但框架会通过 diff 算法高效地复用 Element。

核心理念:UI = f(state)

Widget 本身不包含任何可变状态,也不直接操作 Inventory。 它只负责描述"应该显示什么",而不管"如何显示"和"显示在哪里"。

子类类型:

使用示例:


 // 创建一个计数器 Widget
 public class CounterWidget extends StatefulWidget {
     @Override
     public State createState() {
         return new CounterState();
     }
 }

 class CounterState extends State<CounterWidget> {
     private int count = 0;

     @Override
     public Widget build(BuildContext context) {
         return TextButton.builder()
             .text("Count: " + count)
             .onClick(() -> setState(() -> count++))
             .build();
     }
 }
 
Since:
6.2.0
Version:
1.0.0
Author:
UltiTools Team
See Also:
  • Field Summary

    Fields
    Modifier and Type
    Field
    Description
    private final @Nullable SlotKey
    可选的键,用于在列表中稳定标识此 Widget。
  • Constructor Summary

    Constructors
    Modifier
    Constructor
    Description
    protected
    创建一个新的 Widget 实例。
    protected
    Widget(@Nullable SlotKey key)
    创建一个新的 Widget 实例,并指定 key。
  • Method Summary

    Modifier and Type
    Method
    Description
    boolean
    canUpdate(@NotNull Element element)
    检查此 Widget 是否可以更新给定的 Element。
    abstract @NotNull Element
    为此 Widget 创建对应的 Element。
    boolean
     
    @Nullable SlotKey
    获取此 Widget 的 key。
    int
     
    boolean
    isSameWidget(@Nullable Widget other)
    检查两个 Widget 是否代表相同的配置。
     

    Methods inherited from class java.lang.Object

    clone, finalize, getClass, notify, notifyAll, wait, wait, wait
  • Field Details

    • key

      @Nullable private final @Nullable SlotKey key
      可选的键,用于在列表中稳定标识此 Widget。

      当 Widget 在列表中时,应该提供一个稳定的 key 来帮助框架识别 哪些 Widget 是相同的,从而优化 diff 性能。

  • Constructor Details

    • Widget

      protected Widget()
      创建一个新的 Widget 实例。
    • Widget

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

    • getKey

      @Nullable public @Nullable SlotKey getKey()
      获取此 Widget 的 key。
      Returns:
      key,如果没有设置则返回 null
    • createElement

      @NotNull public abstract @NotNull Element createElement()
      为此 Widget 创建对应的 Element。

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

      Returns:
      对应的 Element 实例
    • canUpdate

      public boolean canUpdate(@NotNull @NotNull Element element)
      检查此 Widget 是否可以更新给定的 Element。

      默认实现检查运行时类型是否相同。 子类可以重写此方法以提供自定义的更新逻辑。

      Parameters:
      element - 要检查的 Element
      Returns:
      如果可以更新则返回 true
    • isSameWidget

      public boolean isSameWidget(@Nullable @Nullable Widget other)
      检查两个 Widget 是否代表相同的配置。

      如果两个 Widget 的 key 相同且运行时类型相同,则认为它们是相同的 Widget。 这用于 diff 算法决定是否复用 Element。

      Parameters:
      other - 另一个 Widget
      Returns:
      如果相同则返回 true
    • equals

      public boolean equals(Object o)
      Overrides:
      equals in class Object
    • hashCode

      public int hashCode()
      Overrides:
      hashCode in class Object
    • toString

      public String toString()
      Overrides:
      toString in class Object