Flutter BLoC 变量最佳实践

Flutter BLoC variables best practice

最近开始使用 BLoC 方法构建应用程序,不清楚的一件事是在哪里“保存”BLoC 变量。我想我们可以有这两个选择:

  1. 在BLoC中声明一个变量class;例如,在我的 class 中,我可以执行以下操作:
class ModulesBloc extends Bloc<ModulesEvent, ModulesState> {
   late String myString;
}

并在我的 UI 中访问它,如下所示:

BlocProvider.of<ModulesBloc>(context).myString;
  1. 将其保存为状态变量;例如我可以声明我的状态 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 个对象:bloceventstate

state 是可变部分,而 bloc 是对您的问题的描述(每个 event 发出什么 state)。因此,在我看来,描述您的问题的 不可变 变量应该放在 bloc 中。然而,任何可能改变的是你的 bloc 的 state (与你的小部件的 state 相同)并且应该存储在 state.

示例:

您想创建一个可以设置计时器的应用程序。在此应用程序中,您可以有多个计时器,每个计时器将由 name.

标识

在这种情况下:

  • 您的状态将是一个对象,其中包含一个名为 timeCount 的双精度变量,例如,它会每秒递增一次。
  • 您的集团将有一个名为 namefinal 字段,必须在创建秒表期间进行设置。

有趣的是,如果您希望 bloc 也处理秒表 creation,您将有 2 个状态:第一个为空,第二个为 nametimeCount。看看 name 是如何自然地变成可变的,因此现在可以在 state 中找到。