Class State<T extends StatefulWidget>
java.lang.Object
com.ultikits.ultitools.abstracts.gui.declarative.core.State<T>
- Type Parameters:
T- 对应的 StatefulWidget 类型
- Direct Known Subclasses:
NavigatorState
State 是 StatefulWidget 的可变状态。
State 对象由框架管理,具有以下特性:
- 在 StatefulWidget 插入树中时创建
- 在 StatefulWidget 从树中移除时销毁
- 在 StatefulWidget 重建时复用
生命周期:
initState()- 初始化状态,只调用一次build(BuildContext)- 构建 UI,可能调用多次didUpdateWidget(StatefulWidget)- 配置变化时调用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 Summary
Fields -
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionabstract @NotNull Widgetbuild(@NotNull BuildContext context) 构建此 State 的 UI。(package private) voidprotected voiddidUpdateWidget(T oldWidget) Widget 配置发生变化时调用。(package private) voiddidUpdateWidgetInternal(@NotNull StatefulWidget oldWidget) 内部方法:调用 didUpdateWidget,使用原始类型避免泛型问题。protected voiddispose()清理资源。获取与此 State 关联的 Widget。protected void初始化状态。(package private) booleanisDirty()boolean检查 State 是否已挂载到树中。(package private) voidsetElement(@Nullable StatefulElement element) (package private) voidsetMounted(boolean mounted) voidsetState(@NotNull VoidCallback fn) 标记 State 为 dirty,并安排重建。(package private) voidsetWidget(@NotNull StatefulWidget widget)
-
Field Details
-
_widget
-
_element
-
_dirty
private boolean _dirty -
_mounted
private boolean _mounted
-
-
Constructor Details
-
State
public State()创建一个新的 State。
-
-
Method Details
-
getWidget
获取与此 State 关联的 Widget。- Returns:
- Widget 实例
- Throws:
IllegalStateException- 如果 State 尚未挂载
-
isMounted
public boolean isMounted()检查 State 是否已挂载到树中。- Returns:
- 如果已挂载则返回 true
-
setState
标记 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
Widget 配置发生变化时调用。当父 Widget 重建并创建新的 StatefulWidget 实例时调用。 可以在此比较新旧 Widget 的属性,并相应地调整状态。
- Parameters:
oldWidget- 旧的 Widget 实例
-
build
构建此 State 的 UI。这个方法在以下情况会被调用:
- initState 之后
- didUpdateWidget 之后
- setState 之后
- 依赖的 InheritedWidget 变化时
- Parameters:
context- 构建上下文- Returns:
- Widget 树
-
setElement
-
setWidget
-
setMounted
void setMounted(boolean mounted) -
isDirty
boolean isDirty() -
clearDirty
void clearDirty() -
didUpdateWidgetInternal
内部方法:调用 didUpdateWidget,使用原始类型避免泛型问题。
-