使用Flutter Provider意味着没有StatefulWidgets?

时间:2019-12-22 15:03:52

标签: flutter provider

我准备用Flutter和Provider编写我的第一个非凡的应用程序。我已经阅读了Provider如何促进不变的小部件(StatelessWidgets)的内容。我的问题是,在使用提供程序时使用StatefulWidgets是否总是总是的反模式?如果没有,那么什么时候在Provider应用中使用StatefulWidgets更好呢?

3 个答案:

答案 0 :(得分:1)

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

Provider是Flutter拥有的状态管理机制之一,在后台,Provider跟踪小部件内部所做的更改。 Provider不管是无状态小部件还是有状态小部件都无关紧要,如果有任何更改,它将重新构建小部件。

listen: false告诉提供者即使数据被修改也不要重建小部件。这意味着只有在父小部件被setState()或ProviderClass类值修改后,它才能重新构建。

答案 1 :(得分:0)

provider不在乎是否编写无状态/有状态或其他任何内容(表示吗?)。

在许多情况下,它无需编写StatefulWidget,但是它并不声称您仅应使用StatelessWidget

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

答案 2 :(得分:0)

在Rémi的答案中添加了此实现的新内容:

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

在此基于我对React + Redux的经验以及围绕本机Web组件(两者的生命周期相似)以及LitElement的填充对象的经验做出一些假设。到目前为止,这些模式似乎并不相同。除了Redux之外,它过于冗长(而且很糟糕,请原谅)。