Flutter 状态管理 (BloC):无状态与有状态小部件

ste*_*Kim 11 stateless dart flutter bloc

所以我通读Bloc了状态管理flutter

由于 Bloc 允许您下沉和流式传输(根据输入重建小部件),那么是否有可能主要使用无状态小部件来构建应用程序?

例如,假设我制作了许多单个无状态类小部件,因此几乎所有东西都被划分为自己的无状态小部件。

使用 Bloc 状态管理,我可以简单地重建某个无状态的子小部件来反映更改。

在这种方法中,我认为不需要使用有状态小部件。当然,作为一个完全的初学者flutter,我想听听这种方法是否有任何优点。

这是一个好方法吗?任何信息将不胜感激。

Jac*_*ack 11

你是对的,你只能使用 StatelessWidgets。你只需要知道你在哪里创建你的集团。某些实例化方法比其他方法更容易测试,例如将 bloc 作为参数传递给 StatelessWidget。

但是对于实现,我flutter_bloc最喜欢这个库:https : //pub.dev/packages/flutter_bloc

它包括BlocProvider自动处理组的创建和处置。

另一件需要注意的事情是,您通常必须在一个块中启动一个事件来执行某些操作,并且StatefulWidgetinitState方法中运行它可能很有用。

你可以在 a 中说StatefulWidget

initState(){
   _myBloc = SomeBloc()..add(SomeEvent());
}

// Then somewhere in your widget tree
BlocProvider<MyBloc>(
  create: (context) => _myBloc,
  builder: (context, state) {},
)
Run Code Online (Sandbox Code Playgroud)

或者,在您的StatelessWidget

BlocProvider<MyBloc>(
  create: (context) => MyBloc()..add(SomeEvent()),
  builder: (context, state) {},
)
Run Code Online (Sandbox Code Playgroud)

你会发现什么最适合你,但我发现 Flutter 主要取决于特定功能的情况和目标。没有必要让自己养成总是需要使用 StatelessWidget 的习惯,但您是对的,这是可能的。


小智 8

您只能使用无状态小部件。但是有一个问题,您应该在处理应用程序之前关闭流。它可以通过两种方式处理:

  1. 首先,您可以在 stateful 的 dispose 方法中使用 Stateful 小部件并关闭 bloc 流。

  2. 使用 BlocProvider。在这种情况下,Bloc Provider 只是一个有状态的小部件。它会自动关闭流。然后你可以在 Stateless Widget 中使用 BlocProvider 来使用 bloc。

但这并不意味着我们不需要有状态的小部件。例如,有状态小部件在动画中很重要。动画、文本输入或小部件本身的任何本地更改不应在 bloc 或其他状态管理中处理。这是小部件本身的职责。