gpt4 book ai didi

dart - Flutter - 为什么每次重建父小部件时都不调用子小部件的 initState()?

转载 作者:IT老高 更新时间:2023-10-28 12:37:46 25 4
gpt4 key购买 nike

我有一个 Parent 小部件,它保存一些状态,在这种情况下是一个计数器。

这个状态通过 Child 小部件的构造函数传递给它。

现在,我的理解是,Child 应该在每次 Parent 的状态更改时重新构建,因为它在 build() 内部Parent 函数,并且每次状态变化时都会调用 build()

这个概念让我相信每次计数器更改时都会打印 INIT STATE! 消息。但事实并非如此!

我本质上想要一个只触发一次的“钩子(Hook)”,只要 Child 的构造函数参数(message)发生变化。

有人能解释一下为什么会这样吗,什么是获得上述“钩子(Hook)”的正确方法?

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());
}
}

最佳答案

好的,看起来 State 中明确提到了这一点类的文档。

正确的做法是重写State子类中的didUpdateWidget方法。

关于dart - Flutter - 为什么每次重建父小部件时都不调用子小部件的 initState()?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54759920/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com