【问题标题】:Flutter : Saving state in a widget between Bloc transitionsFlutter:在 Bloc 转换之间的小部件中保存状态
【发布时间】:2020-06-08 22:31:13
【问题描述】:

我正在使用flutter_bloc 在我的应用程序中实现 bloc。

我有一个可以进行多次转换的屏幕。因此,在页面上的不同操作上调度了多个事件,并且返回的每个状态都代表了该特定事件的返回状态。

如何在这些转换之间维护小部件中的状态?

例如,屏幕有 3 个按钮。每个按钮单击都会调度一个事件,并且状态会返回一段文本。所以点击button1后,状态返回一个带有文本的State对象,并且按钮被这个文本替换。现在,当用户单击 button2 时,它会返回另一段文本并替换 button2。但是当这种情况发生时,button1 的文本消失了。

我有一个 StatefulWidget,它的状态看起来像这样 -

List<String> allTexts = List();

但更新此状态不起作用,因为调用 setState 会引发此错误 -

setState() or markNeedsBuild() called during build.

我该如何解决这个问题?

提前致谢。

【问题讨论】:

  • 在您的 build 方法中检查可能的调用 setState
  • 你不应该在widget中保存状态,而是将状态保存在bloc的状态模型类中
  • 绝对同意!你如何建议我传递价值?我有多个类,每个代表一个新状态。有没有一个例子我可以看到所有这些状态类都改变了一个变量?

标签: flutter bloc flutter-bloc


【解决方案1】:

您始终可以发出 State 以及所有 buttons 的文本。因此,当您单击 button 2 时,您会收到 button 2 的文本 + 为 button 1 和 3 保存的所有 text

【讨论】:

  • 状态一个接一个地发出。有 2 个名为 SuccessState 和 FailureState 的类被返回。 SuccessState 有一个保存值的字符串字段。重点是,当第二个问题完成后,我如何访问第一个问题的 SuccessState ?我同意我们需要维护 List 值,但是在哪里可以维护以及如何维护?
  • 您可以将List&lt;String&gt; 添加到SuccessState,而不是只添加一个包含当前值的String 字段。每次产生 SuccessState 时,您都会获得包含所有按钮值的列表,而不仅仅是按下的按钮
猜你喜欢
  • 2020-04-12
  • 2020-03-10
  • 2020-02-19
  • 1970-01-01
  • 2021-06-17
  • 1970-01-01
  • 2021-10-22
  • 2023-01-23
  • 2021-03-19
相关资源
最近更新 更多