【问题标题】:Best way to persist multiple variables within the same BLoC在同一个 BLoC 中保留多个变量的最佳方法
【发布时间】:2021-02-11 10:18:43
【问题描述】:

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

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

【问题讨论】:

    标签: flutter bloc


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-10-18
      • 1970-01-01
      • 2021-10-15
      • 2021-11-26
      • 2016-09-11
      • 1970-01-01
      • 2020-12-15
      • 2020-10-19
      相关资源
      最近更新 更多