【发布时间】:2019-07-12 14:00:00
【问题描述】:
我有一个Parent 小部件,它保存一些状态,在这种情况下是一个计数器。
此状态通过 Child 小部件的构造函数传递给它。
现在,我的理解是,Child 应该在每次Parent 的状态更改时重新构建,因为它在Parent 的build() 函数内,并且build() 每次都会被调用- 状态变化的时间。
这个概念让我相信每次计数器更改时都会打印INIT STATE! 消息。但事实并非如此!
我本质上想要一个“钩子”,只要Child 的构造函数参数 (message) 发生变化,就会触发一次。
有人能解释一下为什么会这样吗,有上述“钩子”的正确方法是什么?
class Child extends StatefulWidget {
final String message;
const Child(this.message, {Key key}) : super(key: key);
@override
_ChildState createState() => _ChildState();
}
class _ChildState extends State<Child> {
@override
void initState() {
print("INIT STATE!");
super.initState();
}
@override
Widget build(BuildContext context) {
return Center(
child: Text(widget.message),
);
}
}
class Parent extends StatefulWidget {
@override
_ParentState createState() => _ParentState();
}
class _ParentState extends State<Parent> {
int _counter = 0;
@override
void initState() {
Timer.periodic(Duration(seconds: 1), (_) {
if (mounted) {
setState(() {
_counter += 1;
});
}
});
super.initState();
}
@override
Widget build(BuildContext context) {
return Child(_counter.toString());
}
}
【问题讨论】:
-
@anmol.majhail 您建议的链接已损坏,请从此处更新或删除它。谢谢