我正在使用flutter_bloc
v 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结构的项目中。
想知道是否有更好或正确的方法来实现这一目标?
答案 0 :(得分:2)
您不应该只在false
中返回operator ==
。如果状态相等,则意味着两个布尔相等,然后用这种方式编程。
除此之外,如果您只有一个状态且变量很多,那么就没有Bloc警察来接您。我仍然会考虑使该状态不可变并每次都生成一个新状态,即使它是同一类。您可以从核心类中获取提示,并使用copyWith
之类的ThemeData
方法来简化创建新状态的过程。