如何在某个属性值发生更改后立即强制Widget重新生成?一些伪代码:
class Live extends StatefulWidget {
String name;
Live(this.name);
@override
_LiveState createState() => _LiveState();
}
class _LiveState extends State<Live> {
// some turbo logic I don't want to move to Live class
..
@override
Widget build(BuildContext context) {
return Column(childrens: [
Text(widget.name),
Card(content calculated based on turbo logic),
]
);
}
}
当String name
属性更新(基于父级的setState调用)时,所有事情都是实时发生的。更改将立即反映在文本小部件中。该值是立即可见的,因为我使用的是widget.name
调用,所以在built()
方法中,我使用的是来自Live
类的属性,而不是状态。
问题是,另一个封装在Card中的小部件被计算在标记为// some turbo logic I don't want to move to Live class
的位置。由于这个事实,当我想在本节中看到更新时,我需要切换选项卡,然后切换到设置,然后返回到Live选项卡,查看与Card内容相关的更改。我相信它再次触发了build()方法。
戈拉斯:
name
值后,状态小部件立即重新构建。turbo logic
移动到Live,并将其保留在状态类中。发布于 2021-03-15 06:59:52
首先,您的StatefulWidget
应该是不可变的,因此只包含不可变字段。我建议您将name
字段移到State
中,并使用setter将其更改。设置程序应该调用setState()
,这将导致所需的重建。
有关更多信息,请参见本导论 --特别是“鸟”示例代码,以了解如何编写setter代码。
https://stackoverflow.com/questions/66640023
复制相似问题