我有一个Parent
小部件,它具有某种状态,在这种情况下为计数器。
此状态通过其构造函数传递给Child
小部件。
现在,据我了解,Child
应该在Parent
的每次状态更改时重新构建,因为它位于build()
的{{1}}函数中,并且每次状态更改时都会调用Parent
。
这个概念使我相信,每次计数器更改时都会打印build()
消息。事实并非如此!
我本质上希望每当INIT STATE!
的构造函数参数(Child
)发生变化时才触发一次“钩子”。
有人可以解释为什么会这样吗,以及使用上述“挂钩”的正确方法是什么?
message
答案 0 :(得分:3)
好吧,看来State类的文档中已经清楚提到了这一点。
正确的方法是重写didUpdateWidget
子类中的State
方法。
答案 1 :(得分:0)
感谢@Dev Aggarwal。
除了对Dev Aggarwal的回答外,我在此处提供了示例。
在子窗口小部件中实现didUpdateWidget()方法。当父状态发生更改时,didUpdateWidget()方法将在子窗口小部件中调用。
Implement didUpdateWidget() method in Child widget.
@override
void didUpdateWidget(<YourChildScreen> oldWidget) {
super.didUpdateWidget(oldWidget);
print("oldWidget.searchTerm is ${oldWidget.searchTerm}");
print("widget.searchTerm is ${widget.searchTerm}");
if (oldWidget.searchTerm != widget.searchTerm) {
this.updateChildWithParent();
}
}
void updateChildWithParent() {
print("updateChildWithParent/search screen");
setState(() {
_mJsonLoaded = false; // For loader
if (listArray.length > 0) {
listArray.clear();
}
});
// Do whatever you want here…
// Like call api call again in child widget.
}
我希望它会有用。
答案 2 :(得分:0)
initState
仅在状态首次插入小部件树时调用。稍后,由 didUpdateWidget
处理后续调用。