为什么颤动与两个独立的不可变 StatefulWidget
和可变 State
相关?但是是否可以使一个 mutable StatefulWidget
类并管理其中的状态?我认为实现这两个类以创建 StatefulWidget
很烦人。
请向我解释这两个类的实际用法。
答案 0 :(得分:1)
否,这是不可能的。
StatefulWidgets分为2类,因为其中一部分是完全不变的。 Widget
子类不能存储任何可变字段。
我们不在React中,“组件”是可变的,并且实例在组件的整个生命周期中都保持不变。
在扑朔迷离中,小部件的寿命很短。每当我们想要修改某些内容时,我们都会创建一个新的小部件实例。
逆向State和StatefulWidget之间的生命周期很容易做到。并在抽象界面下隐藏“拆分为两个类”
class Foo extends SimpleStateWidget<int> {
@override
int initState(BuildContext context) {
return 42;
}
@override
Widget build(BuildContext context, int state, SetState<int> setState) {
return RaisedButton(
onPressed: () => setState(state + 1),
child: Text(state.toString()),
);
}
}
如果这是您的事,则界面如下:
typedef SetState<T> = void Function(T state);
abstract class SimpleStateWidget<T> extends StatefulWidget {
T initState(BuildContext context, T state) => state;
T didChangeDependencies(BuildContext context, T state) => state;
void dispose(BuildContext context, T state) => state;
T didUpdateWidget(BuildContext context, T state) => state;
T deactivate(BuildContext context, T state) => state;
T reassemble(BuildContext context, T state) => state;
Widget build(BuildContext context, T state, SetState<T> setState);
@override
_SimpleStateWidgetState<T> createState() => _SimpleStateWidgetState<T>();
}
class _SimpleStateWidgetState<T> extends State<SimpleStateWidget<T>> {
T state;
@override
void initState() {
super.initState();
state = widget.initState(context);
}
@override
void didChangeDependencies() {
super.didChangeDependencies();
state = widget.didChangeDependencies(context, state);
}
@override
void dispose() {
widget.dispose(context, state);
super.dispose();
}
@override
void deactivate() {
state = widget.deactivate(context, state);
super.deactivate();
}
@override
void reassemble() {
super.reassemble();
state = widget.reassemble(context, state);
}
@override
Widget build(BuildContext context) {
return widget.build(context, state, _setState);
}
_setState(T value) {
setState(() {
state = value;
});
}
}