使用 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 是 Flutter 的状态管理机制之一,在底层,Provider 会跟踪 widget 内部所做的更改。 Provider不管是Stateless widget还是Stateful widget,如果有任何变化,它会重新构建widget。
listen: false
告诉提供者即使数据被修改也不要重建小部件。这意味着它只能 re-build 如果父窗口小部件被 setState() 修改或被 ProviderClass
class 值修改。
我正准备使用 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 是 Flutter 的状态管理机制之一,在底层,Provider 会跟踪 widget 内部所做的更改。 Provider不管是Stateless widget还是Stateful widget,如果有任何变化,它会重新构建widget。
listen: false
告诉提供者即使数据被修改也不要重建小部件。这意味着它只能 re-build 如果父窗口小部件被 setState() 修改或被 ProviderClass
class 值修改。