flutter - 在同一个 BLoC 中保留多个变量的最佳方法
问题描述
我有一个 BLoC(使用 flutter_bloc),它具有多种可能的状态,并且(现在,随着我向 UI 的这一部分添加更多功能,它可能会变得更多)它需要在状态更改之间保持三个不同的变量,除非显式更改。我发现在制作应用程序时经常发生这种情况,我正在寻找一个更好的解决方案,而不是通过每个状态的构造函数在每个不同的状态变化时手动复制不同的变量(大量样板文件)或(ab)使用 BLoC 观察者复制没有的变量在不同的州之间没有变化。
我最好的想法是创建一个模型来保存不同的变量并在状态变化之间传递模型,但这感觉不对。你们是做什么的?
解决方案
现在,我选择将最后一个状态作为参数提供给超类构造函数并复制这样的值。我可以看到的唯一问题是它们不能为空,除非您在调用时取消要复制的状态并提供所有其他非空参数。
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);
}
// ...
推荐阅读
- python - 正则表达式匹配数字
- html - Excel VBA在没有ID的IE上单击一个按钮
- azure - AWS::CloudFormation::Init 与 Azure 资源管理器
- javascript - 使用打字稿枚举并对期望字符串道具做出反应
- zabbix - 如何在zabbix中通过主机组ID获取主机列表?
- php - 数据库中的加密密码存储但显然错误?
- node.js - 使用机架空间时出现 502 代理错误 Node.js
- java - org.hibernate.Session 和 org.hibernate.classic.Session 的区别
- mysql - 处理 UPDATE 中的死锁
- java - Apache Common CLI 中带和不带参数的必需选项