首页 > 解决方案 > 单个可变状态而不是多个不可变状态?

问题描述

我正在使用库flutter_blocv 6.0.0。我正在寻找使用包含多个状态的单个可变对象的正确方法。

例如,而不是多个状态:

enum RaisedButtonState {
  loading, idle
}
enum FlatButtonState {
  loading, idle
}

我想使用单个状态对象:

class MyState {
  bool raisedButtonLoading;
  bool flatButtonLoading;
  MyState({
    this.flatButtonLoading = false,
    this.raisedButtonLoading = false,
  });
}

但是,这在使用相同状态发出新事件时会出现问题,例如

emit(this.state..raisedButtonLoading = false);

因为该emit()函数具有检查相同状态的验证

if (state == _state && _emitted) return;

目前要解决方法,我将以下内容添加到MyState

@override
int get hashCode => super.hashCode;

@override
bool operator ==(Object o) {
  return false;
}

我知道这可能违反了图书馆的核心概念。但是,必须为不同的状态单独创建一个enum/class似乎有点多余,尤其是在我目前正在处理的具有复杂 UI 结构的项目中。

想知道是否有更好或更正确的方法来实现这一目标?

标签: flutterblocstate-managementflutter-bloc

解决方案


你不应该只返回false你的operator ==. 如果状态相等意味着两个布尔值相等,则以这种方式编程。

除此之外,如果你只有一个州有很多变数,就没有集团警察来抓你。我仍然会考虑使该状态不可变并每次生成一个新状态,即使它是同一个类。您可以从核心类中获得提示,并使用一种copyWith方法ThemeData来轻松创建新状态。


推荐阅读