Flutter 颤振设置状态重建整页效果

Flutter 颤振设置状态重建整页效果,flutter,Flutter,我想知道setState()在颤振中是如何工作的 我有一个包含列表视图和播放按钮的页面。当我按下按钮时,我调用setState()更改按钮上的图标。这会触发ListView重新生成它所包含的所有项目的整个列表 我是否应该将我的按钮包装在一个新的StatefulWidget中,这样重建按钮就不会重建整个页面?或者Flutter是否足够聪明,能够找出真正发生了什么变化,并且只重建这些小部件?如果信是这样,它是如何工作的?我确信我的列表项的构建方法正在被调用…您应该了解更多关于flatter中的反应式

我想知道
setState()
在颤振中是如何工作的

我有一个包含列表视图和播放按钮的页面。当我按下按钮时,我调用
setState()
更改按钮上的图标。这会触发ListView重新生成它所包含的所有项目的整个列表


我是否应该将我的按钮包装在一个新的StatefulWidget中,这样重建按钮就不会重建整个页面?或者Flutter是否足够聪明,能够找出真正发生了什么变化,并且只重建这些小部件?如果信是这样,它是如何工作的?我确信我的列表项的构建方法正在被调用…

您应该了解更多关于flatter中的反应式编程和流的信息。反应式编程是围绕流和侦听器概念的体系结构。流只允许您重建一个特定的元素,它的效率更高

来自谷歌I/O'18的关于它的视频:

解释流和反应式编程概念的好文章:

这是中等难度的方法,但值得学习


祝你好运

谢谢,但我知道反应式编程。但是你推荐什么呢。您是否建议我使用流作为按钮图标和StreamBuilder,以便按下按钮时不需要调用setState?我知道我可以这样做,但我的主要问题是,我是否真的需要这样做,或者我是否知道需要重建什么…@Jonas,当你调用
setState
时,它调用了这个StatefulWidget的重建方法,在这里调用它。现在您可以选择调用
setState
的位置。若您在绘制整个窗口的
小部件中调用它,那个么它将重建所有窗口。如果您创建自定义按钮(StatefulWidget),并在此按钮中调用
setState
,则只会重建按钮。但在最后一个选项中,您将业务逻辑与显示图形相结合,这不是很好。所以你必须使用流,而不是使用
setState
,如果你想以一种好的、有效的方式重建特定的元素:)好的,我想我以前读过一篇文章,说flatter足够聪明,可以弄清楚什么已经改变,什么应该重建,什么不应该重建。如果不是这样的话,我需要确定哪些应该和不应该手动重建。