Flutter BLoC 变量最佳实践
Flutter BLoC variables best practice
最近开始使用 BLoC 方法构建应用程序,不清楚的一件事是在哪里“保存”BLoC 变量。我想我们可以有这两个选择:
- 在BLoC中声明一个变量class;例如,在我的 class 中,我可以执行以下操作:
class ModulesBloc extends Bloc<ModulesEvent, ModulesState> {
late String myString;
}
并在我的 UI 中访问它,如下所示:
BlocProvider.of<ModulesBloc>(context).myString;
- 将其保存为状态变量;例如我可以声明我的状态 class 如下:
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
是对您的问题的描述(每个 event
发出什么 state
)。因此,在我看来,描述您的问题的 不可变 变量应该放在 bloc
中。然而,任何可能改变的是你的 bloc 的 state
(与你的小部件的 state
相同)并且应该存储在 state
.
示例:
您想创建一个可以设置计时器的应用程序。在此应用程序中,您可以有多个计时器,每个计时器将由 name
.
标识
在这种情况下:
- 您的状态将是一个对象,其中包含一个名为
timeCount
的双精度变量,例如,它会每秒递增一次。
- 您的集团将有一个名为
name
的 final
字段,必须在创建秒表期间进行设置。
有趣的是,如果您希望 bloc 也处理秒表 creation,您将有 2 个状态:第一个为空,第二个为 name
和timeCount
。看看 name
是如何自然地变成可变的,因此现在可以在 state
中找到。
最近开始使用 BLoC 方法构建应用程序,不清楚的一件事是在哪里“保存”BLoC 变量。我想我们可以有这两个选择:
- 在BLoC中声明一个变量class;例如,在我的 class 中,我可以执行以下操作:
class ModulesBloc extends Bloc<ModulesEvent, ModulesState> {
late String myString;
}
并在我的 UI 中访问它,如下所示:
BlocProvider.of<ModulesBloc>(context).myString;
- 将其保存为状态变量;例如我可以声明我的状态 class 如下:
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
是对您的问题的描述(每个 event
发出什么 state
)。因此,在我看来,描述您的问题的 不可变 变量应该放在 bloc
中。然而,任何可能改变的是你的 bloc 的 state
(与你的小部件的 state
相同)并且应该存储在 state
.
示例:
您想创建一个可以设置计时器的应用程序。在此应用程序中,您可以有多个计时器,每个计时器将由 name
.
在这种情况下:
- 您的状态将是一个对象,其中包含一个名为
timeCount
的双精度变量,例如,它会每秒递增一次。 - 您的集团将有一个名为
name
的final
字段,必须在创建秒表期间进行设置。
有趣的是,如果您希望 bloc 也处理秒表 creation,您将有 2 个状态:第一个为空,第二个为 name
和timeCount
。看看 name
是如何自然地变成可变的,因此现在可以在 state
中找到。