flutter - 单个可变状态而不是多个不可变状态?
问题描述
我正在使用库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 结构的项目中。
想知道是否有更好或更正确的方法来实现这一目标?
解决方案
你不应该只返回false
你的operator ==
. 如果状态相等意味着两个布尔值相等,则以这种方式编程。
除此之外,如果你只有一个州有很多变数,就没有集团警察来抓你。我仍然会考虑使该状态不可变并每次生成一个新状态,即使它是同一个类。您可以从核心类中获得提示,并使用一种copyWith
方法ThemeData
来轻松创建新状态。
推荐阅读
- git - .gitignore 不起作用 - 仍将文件夹显示为未跟踪
- swift - 服务器没有响应:未知:transportError
- angular - 错误类型错误:无法读取未定义的属性“id”(角度)
- kendo-asp.net-mvc - 以编程方式添加 plotbands 剑道图表
- ruby - 如何解决 Mixlib::ShellOut::ShellCommandFailed 错误
- entity-framework - ASP.NET MVC 5,实体框架 db.savechanges() 返回错误的插入 id
- typescript - 即使为该字段设置了值,Typescript 在对象扩展运算符中也看不到可选字段
- jquery - 在wordpress中找不到jquery文件
- python-3.x - 我的 python 代码只将偶数个名称添加到组中,需要它将所有名称(奇数或偶数)添加到组中
- angular - 如何在登录后打开离子侧菜单上检查身份验证?