为什么 flutter 是由两个独立的 immutable StatefulWidget
和 mutable State
关联的?但是是否可以制作一个可变 StatefulWidget
类并管理其中的状态?我认为实现这两个类以创建 StatefulWidget
非常烦人。
给我解释一下这两个类的实际用法。
最佳答案
不,这是不可能的。
StatefulWidgets 分为两类,因为其中一部分是完全不可变的。 Widget
子类不能存储任何可变字段。
我们不在 React 中,其中“组件”是可变的,并且实例在组件的整个生命周期内保持不变。
在 Flutter 中,小部件的生命周期非常短。每次我们想要修改某些内容时,我们都会创建一个新的小部件实例。
然而,反转 State 和 StatefulWidget 之间的生命周期是很容易做到的。并将“拆分为两个类”隐藏在抽象接口(interface)下
class Foo extends SimpleStateWidget<int> {
@override
int initState(BuildContext context, SetState<int> setState) {
return 42;
}
@override
Widget build(BuildContext context, SetState<int> setState, int state) {
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, SetState<T> setState);
void didChangeDependencies(
BuildContext context, SetState<T> setState, T state) {}
void dispose(BuildContext context, T state) {}
void didUpdateWidget(BuildContext context, SetState<T> setState, T state) {}
void deactivate(BuildContext context, SetState<T> setState, T state) {}
void reassemble(BuildContext context, SetState<T> setState, T state) {}
Widget build(BuildContext context, SetState<T> setState, T state);
@override
_SimpleStateWidgetState<T> createState() => _SimpleStateWidgetState<T>();
}
class _SimpleStateWidgetState<T> extends State<SimpleStateWidget<T>> {
T state;
@override
void initState() {
super.initState();
state = widget.initState(context, _setState);
}
@override
void didChangeDependencies() {
super.didChangeDependencies();
widget.didChangeDependencies(context, _setState, state);
}
@override
void dispose() {
widget.dispose(context, state);
super.dispose();
}
@override
void deactivate() {
widget.deactivate(context, _setState, state);
super.deactivate();
}
@override
void reassemble() {
super.reassemble();
widget.reassemble(context, _setState, state);
}
@override
Widget build(BuildContext context) {
return widget.build(context, _setState, state);
}
void _setState(T value) {
setState(() {
state = value;
});
}
}
关于dart - 不可变的StatefulWidget和Flutter中的State有什么用,但是只能做一个可变的StatefulWidget没有state,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53019294/