【问题标题】: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 函数仍会被多次调用,这让我对差异感到很困惑在StatelessWidgetStatefullWidget 之间。

  1. 如果我们在其中使用ChangeNotifierProvider,那么使用StatelessWidget 是否安全?
  2. 使用StatelessWidgetStatefullWidget 相比有什么性能提升吗?

【问题讨论】:

    标签: flutter flutter-provider flutter-widget statelesswidget


    【解决方案1】:

    “安全”不适用,因为setStateState 类上的一个方法,并且因为StatelessWidget 没有这些方法,所以这甚至不会出现。并且没有关于性能的广泛而全面的规则。试试看,看看。

    【讨论】:

    • 感谢您的回答,我更新了问题,您完全正确,我的错,我匆忙创建问题而不考虑我的上下文,我使用Provider,它显示了一个小部件经过一些更改后重建自身,它根本不使用setState
    • 现在您更新了问题 1,我的答案是肯定的。 StatelessWidget 中仍然没有保存任何状态,只是将传入数据转换为小部件的一种方式。
    【解决方案2】:

    这有点令人困惑,但这种解释可能会有所帮助:

    由于ChangeNotifierProvider 将处理状态,因此父级(您的小部件)不需要是Statefull,该责任由ChangeNotifierProvider 小部件承担。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-04-03
      • 2022-07-15
      • 2020-10-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-06
      相关资源
      最近更新 更多