首页 > 解决方案 > 在同一个 BLoC 中保留多个变量的最佳方法

问题描述

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

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

标签: flutterbloc

解决方案


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

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);
}

// ...

推荐阅读