当状态随 Provider 发生变化时,使用 StatelessWidget 是不是安全?
Posted
技术标签:
【中文标题】当状态随 Provider 发生变化时,使用 StatelessWidget 是不是安全?【英文标题】:It is safe to use StatelessWidget when the state changes with a Provider?当状态随 Provider 发生变化时,使用 StatelessWidget 是否安全? 【发布时间】:2021-03-26 16:50:10 【问题描述】:我看到 Flutter 团队这样建议:
例如,在 android 中,这类似于放置带有徽标的 ImageView。 > 在运行时徽标不会更改,因此请在 Flutter 中使用 StatelessWidget。 如果您想根据在进行 HTTP 调用或用户交互后收到的数据动态更改 UI,那么您必须使用 StatefulWidget 并告诉 Flutter 框架该小部件的状态已更新,以便它可以更新该小部件。 https://flutter.dev/docs/get-started/flutter-for/android-devs#how-do-i-update-widgets
我使用provider,它允许您使用ChangeNotifierProvider
来重建小部件树。
如果我有一个StatelessWidget
并且我们使用一个ChangeNotifierProvider
,当ChangeNotifier
通知更改并且小部件重新构建时,build
函数仍会被多次调用,这让我对差异感到很困惑在StatelessWidget
和StatefullWidget
之间。
-
如果我们在其中使用
ChangeNotifierProvider
,那么使用StatelessWidget
是否安全?
使用StatelessWidget
与StatefullWidget
相比有什么性能提升吗?
【问题讨论】:
【参考方案1】:“安全”不适用,因为setState
是State
类上的一个方法,并且因为StatelessWidget
没有这些方法,所以这甚至不会出现。并且没有关于性能的广泛而全面的规则。试试看,看看。
【讨论】:
感谢您的回答,我更新了问题,您完全正确,我的错,我匆忙创建问题而不考虑我的上下文,我使用Provider
,它显示了一个小部件经过一些更改后重建自身,它根本不使用setState
现在您更新了问题 1,我的答案是肯定的。 StatelessWidget 中仍然没有保存任何状态,只是将传入数据转换为小部件的一种方式。【参考方案2】:
这有点令人困惑,但这种解释可能会有所帮助:
由于ChangeNotifierProvider
将处理状态,因此父级(您的小部件)不需要是Statefull
,该责任由ChangeNotifierProvider
小部件承担。
【讨论】:
以上是关于当状态随 Provider 发生变化时,使用 StatelessWidget 是不是安全?的主要内容,如果未能解决你的问题,请参考以下文章
Flutter Provider:如何通知模型它包含的模型发生了变化?
当节点后端(MongoDB)中的状态发生变化时通知 Angular 前端