Flutter BLoC:管理主要数据类型的状态
Posted
技术标签:
【中文标题】Flutter BLoC:管理主要数据类型的状态【英文标题】:Flutter BLoC: managing the state of primary data types 【发布时间】:2020-08-01 12:48:56 【问题描述】:我正在使用 Flutter 开发一个移动应用程序。我是 Flutter 的新手。我正在使用 BLoC 进行状态管理。我知道它是专门为管理异步执行而设计的。但 BLoC 的目的也是为了进行状态管理。但我有点困惑,不太确定如何处理 BLoC 中的主要数据类型。
让我们想象一下,我有一个按钮和一个图像。功能是当单击按钮时,图像的可见性将被切换。从字面上看,我们只需要使用一个布尔变量来管理图像的状态。这就是我将如何实现它的方式。
我有一个名为 HomeBloc 的 bloc 类,其实现如下。
class HomeBloc
bool _isImageDisplayed = true;
bool get isImageDisplayed => _isImageDisplayed;
void set isImageDisplayed(bool displayed)
this._isImageDisplayed = displayed;
//the rest of the code for other functionalities goes here
final homeBloc = HomeBloc();
然后在 HomePage 小部件中,当单击按钮时,我在 setState 方法中像这样更新图像的状态。
this.setState(()
homeBloc.isImageDisplayed = false;
);
我的问题是“这是在 Flutter 中管理 BLoC 中主要数据类型的标准方法”?这是最佳做法吗?我们需要使用 StreamBuilder 吗?我们甚至需要在 BLoC 内部管理它吗?
【问题讨论】:
【参考方案1】:我猜这不是最佳实践,因为在大型应用程序上使用 setState 变得非常困难,并且重新渲染不会无缘无故更改的小部件。想象一下制作一个电子商务应用程序,然后您只需转到产品页面,将您喜欢的产品添加到购物车中,但是您在主页中设计了一个带有红点的购物车图标,里面有一个数字来指定多少钱您在购物车中获得的产品,因此您通过传递一个 setState 主页路由或整个应用程序的函数来处理 main.dart 文件中该图标的状态,这很难,不是吗?。
谢天谢地,BLoC 和 Provider 模式基本上都在使用 setState,但使用了更好的方式,因此您不必为了文本或其他内容的微小变化而重新渲染整个页面,而只需重新渲染小部件树中的特定小部件。
我还建议使用基于 Provider 和 RxDart (Streams) 构建的 BLoC Provider,因为它可以很好地隔离 UI 代码和业务代码。
检查Provider 和BLoC Provider。
【讨论】:
谢谢。似乎 flutter_bloc 包是最好的选择。以上是关于Flutter BLoC:管理主要数据类型的状态的主要内容,如果未能解决你的问题,请参考以下文章