我有一个Parent
小部件,它包含一些状态,在本例中是一个计数器.
此状态使用其构造函数传递给Child
小部件.
现在,根据我的理解,每次Parent
的状态改变时,Child
都应该被重新构建,因为它在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());
}
}