使用 Flutter Provider 意味着没有 StatefulWidgets?

Using Flutter Provider means no StatefulWidgets?

我正准备使用 Flutter 和 Provider 编写我的第一个重要应用程序。我已经阅读了有关 Provider 如何促进不可变小部件 (StatelessWidgets) 的信息。我的问题是,在使用 Provider 时使用 StatefulWidgets 是否 always 是一种反模式?如果不是,什么时候最好在 Provider 应用程序中使用 StatefulWidgets 的例子是什么?

编辑

我已经使用 Provider 几个月了,在每种情况下我仍然更喜欢它而不是 StatefulWidgets。我时不时地引入一个 StatefulWidget,主要是为了尝试熟悉它们,但几乎立即后悔并重构为 Provider。前几天我 运行 进入了不刷新的小部件,因为它们是相同的类型,所以正在考虑引入键以便它们刷新。前几次尝试失败了,所以我重构了 Provider 并且一切正常(不需要密钥)。

反模式在我的 OP 中不是合适的术语。我想我的问题是,是否有 StatefulWidgets 更干净或 easier/better 可以使用的示例?

provider 不关心你写的是 stateless/stateful 还是其他任何东西(hooks?)。

它消除了在许多情况下写 StatefulWidget 的需要,但它并不声称您应该只使用 StatelessWidget

最后,由您决定是否需要 StatefulWidget。例如,您在编写动画时可能需要它。

添加到 Rémi 的答案和此实现的新内容:

  • 为共享模型使用 Provider
  • 在需要时使用小部件状态来管理特定于该问题的模型
  • 想象一个用户对象在 auth 之后,之前为 null,通过应用程序共享,具有特定于编辑字段的状态的表单,如昵称或其他,更新本地状态并可能传播到产品的其余部分(当在后端完成更新时?......谁知道)并且当不再需要该视图时该状态被处理掉,但用户引用通过提供者引用保留。在提供程序模型中管理所有状态更改没有意义——这就是结果所在。

根据我使用 React+Redux 的经验,以及围绕原生 Web 组件(与这两者相似的生命周期)以及 LitElement 传递对象,在此做出一些假设。如果不相同,则模式看起来相似 so-far.

Provider.of<ProviderClass>(context, listen: false);

Provider 是 Fl​​utter 的状态管理机制之一,在底层,Provider 会跟踪 widget 内部所做的更改。 Provider不管是Stateless widget还是Stateful widget,如果有任何变化,它会重新构建widget。

listen: false 告诉提供者即使数据被修改也不要重建小部件。这意味着它只能 re-build 如果父窗口小部件被 setState() 修改或被 ProviderClass class 值修改。