有时 BLoC 状态包含多个字段,我们需要一个单独的类来存储 bloc 状态。在示例中,使用的方法是状态是不可变的对象,要更改状态,我们需要执行状态对象的完整副本:
emit(state.copyWith(status: WeatherStatus.loading));
问题是为什么我们需要让状态类不可变,这不是不必要的复制操作导致代码效率不足吗?
在 Flutter 中的 BLoC 模式上下文中使状态类不可变,以及使用 copyWith 等方法发出新状态的做法植根于良好软件设计的几个原则,特别是对于反应式编程中的状态管理。
在性能至关重要且对象很大或很复杂的情况下,复制对象来更新单个字段效率低下的担忧可能是有效的。然而,在绝大多数 Flutter 应用程序中,性能影响可以忽略不计。
此外,使用 copyWith 方法更新状态还带来了可读性、简单性和可维护性。
我将可变状态称为“海盗块”。