flutter - Flutter 状态管理(BloC):无状态与有状态小部件
问题描述
所以我正在通读Bloc
.flutter
由于 Bloc 允许您接收和流式传输(根据输入重建小部件),那么是否可以构建一个主要使用无状态小部件的应用程序?
例如,假设我制作了许多单一的无状态类小部件,因此几乎所有东西都被划分为自己的无状态小部件。
使用 Bloc 状态管理,我可以简单地重建某个无状态子小部件以反映更改。
在这种方法中,我认为不需要使用有状态小部件。当然,作为一个完全的初学者flutter
,我想听听这种方法是否有任何优点。
这是一个好方法吗?任何信息将不胜感激。
解决方案
你是对的,你只能使用 StatelessWidgets。你只需要知道你在哪里创建你的集团。某些实例化方式比其他方式更容易测试,例如将 bloc 作为参数传递给 StatelessWidget。
但对于实施,我flutter_bloc
最喜欢这个库:
https ://pub.dev/packages/flutter_bloc
它包括BlocProvider
自动处理块的创建和处置。
要注意的另一件事是,您通常必须在一个块中启动一个事件才能执行某些操作,并且StatefulWidget
在方法中运行它可能很有用initState
。
您可以在 a 中说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 的习惯,但你是对的,它是可能的。
推荐阅读
- python - 找不到使用硒的元素(python)
- r - 如何在两个特定字符之间拆分字符串 (R)
- python - TypeError:“datetime.date”和“str”的实例之间不支持“>”
- android - 如何设计具有立面效果的按钮
- javascript - 如何在不使用 JavaScript 中的 Math.log 的情况下获得指数“x”(2 的“x”次方)?
- regex - 正则表达式:从字符串右侧排除字符,直到找到数字
- c++ - std::runtime_error 子级中的默认构造函数
- jms - ActiveMQ - 检测消息重复
- saxon - “使用 TinyBuilder 为 null 构建树”对撒克逊扩展功能和使用 -t 选项意味着什么?
- rally - 在 Rally REST API 中使用 Java 为 Getrequest 设置页面大小限制