flutter - Flutter BLoC 变量最佳实践
问题描述
最近开始使用 BLoC 方法来构建应用程序,但不清楚的一件事是在哪里“保留” BLoC 变量。我想我们可以有这两种选择:
- 在 BLoC 类中声明一个变量;例如,在我的课堂上,我可以执行以下操作:
class ModulesBloc extends Bloc<ModulesEvent, ModulesState> {
late String myString;
}
并在我的 UI 中访问它,如下所示:
BlocProvider.of<ModulesBloc>(context).myString;
- 将其保留为状态变量;例如,我可以如下声明我的状态类:
class ModulesState extends Equatable {
const ModulesState({required this.myString});
final String myString;
@override
List<Object> get props => [myString];
}
并在我的 UI 中访问它,如下所示:
BlocBuilder<ModulesBloc, ModulesState>(
builder: (BuildContext context, ModulesState modulesState) {
modulesState.myString;
}
)
上述任何方法是否存在任何性能损失/状态稳定性问题?
谢谢!
解决方案
我不确定是否有绝对的答案,但我至少可以给出我的意见。
在 bloc 中有 3 个对象:bloc
, event
, state
.
state
是可变部分,而是bloc
您的问题的描述(state
每个要发出的内容event
)。因此,在我看来,描述您的问题的不可变变量应该放在bloc
. 但是,任何可能改变的东西都是state
你的 bloc (与state
你的小部件相同),因此应该存储在state
.
例子:
您想创建一个可以设置计时器的应用程序。在这个应用程序中,您可以拥有多个计时器,每个计时器将由name
.
在这种情况下:
- 您的状态将是一个对象,其中包含一个名为 的双变量
timeCount
,例如,它将每秒递增一次。 - 您将有一个
final
名为的字段name
,必须在创建秒表期间设置该字段。
有趣的是,如果您希望该集团也处理秒表创建,您将有两种状态:第一个是空的,第二个是带有name
and的timeCount
。看看如何自然地name
变得可变,因此在state
现在被发现。
推荐阅读
- c# - WPF 并行运行多个任务(selenium webdrivers)无法正常工作
- mongodb - 为字母数字字段创建 mongo db 索引的正确方法
- java - 向 API 传递多个参数
- flutter - 如何修复 Flutter 错误消息:颜色不是类型?
- reactjs - 使用 Lambda 函数 + API 网关将图像从 ReactJS 上传到 AWS S3
- centos - CyberPanel 网络邮件 RainLoop 不发送/接收
- python - 更新第一组中所有行的列
- python - 在 Python 中获得漂亮的操作系统名称
- c++ - Int 数组与 Char 数组
- python - 对于循环加法器问题