在同一BLoC中保持多个变量的最佳方式



我有一个BLoC(使用flatter_BLoC(,它有多种可能的状态,并且(现在,随着我向UI的这一部分添加更多功能,它可能会变得更多(它需要在状态更改之间保持三个不同的变量,除非显式更改。我发现这种情况在制作应用程序时经常发生,我正在寻找一个更好的解决方案,而不是在每次不同的状态变化时通过每个状态的构造函数手动复制不同的变量(大量样板(或(ab(使用BLoC观测器复制不同状态之间没有变化的变量。

我最好的想法是创建一个单独的模型来保存不同的变量,并在状态变化之间传递模型,但这感觉是错误的。你们是做什么的?

目前,我选择将最后一个状态作为参数提供给超类构造函数,并复制这样的值。我能看到的唯一问题是,除非在调用时取消要复制的状态并提供所有其他非null参数,否则它们不能为null。

abstract class TaskEditorState {
final TaskModel task;
final TaskModel original;
final bool adjustByEstimate;
TaskEditorState({
@required TaskEditorState copyFrom,
TaskModel original,
TaskModel task,
bool adjustByEstimate,
})  : this.original = original ?? copyFrom?.original,
this.task = task ?? copyFrom?.task,
this.adjustByEstimate =
adjustByEstimate ?? copyFrom?.adjustByEstimate;
}
class TaskEditorInitial extends TaskEditorState {
TaskEditorInitial(
{@required TaskModel task,
@required TaskModel original,
@required adjustByEstimate})
: super(
copyFrom: null,
task: task,
original: original,
adjustByEstimate: adjustByEstimate);
}
class TaskEditorNameEdited extends TaskEditorState {
TaskEditorNameEdited({@required TaskEditorState copyFrom})
: super(copyFrom: copyFrom);
}
// ...
class TaskEditorCreatedTask extends TaskEditorState {
TaskEditorCreatedTask(
{@required TaskEditorState copyFrom, TaskModel task})
: super(copyFrom: copyFrom, task: task);
}
// ...

最新更新