繁体   English   中英

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

[英]Flutter State Management (BloC): Stateless vs Stateful widget

所以我正在阅读Bloc的 state 管理flutter

既然 Bloc 允许你下沉和 stream (根据输入重建一个小部件),那么是否可以构建一个主要使用无状态小部件的应用程序?

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

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

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

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

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

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

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

要注意的另一件事是,您通常必须在一个块中启动一个事件才能执行某些操作,而StatefulWidget可能有助于在initState方法中运行它。

您可以在StatefulWidget中说:

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

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

或者,在您的StatelessWidget中:

BlocProvider<MyBloc>(
  create: (context) => MyBloc()..add(SomeEvent()),
  builder: (context, state) {},
)

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

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

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

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

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

使用 flutter bloc 模式的最佳方法是使用有状态小部件,因为只要有更改,您就可以收听 stream 和 setstate。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM