• 赚钱入口【需求资源】限时招募流量主、渠道主,站长合作;【合作模式】CPS长期分成,一次推广永久有收益。主动打款,不扣量;

FLUTTER中的BLOC模式

Flutter rin, seun 10个月前 (06-16) 127次浏览 0个评论

通过标题,您一定对本文的内容有所了解。由于Flutter每天都在增长,因此开发人员也是如此,作为开发人员,我们一直在寻找一种简单的方式来处理代码。因此,当标题大声说出来时,我们将详细介绍BLoC模式,并回答各种问题,例如,

什么是BLoC模式?
为什么选择BLoC?
什么时候使用BLoC?
以及,如何实施BLoC?

但是在本文中,我们将仅详细介绍前三个问题,而下一篇文章将仅以示例为特色介绍BLoC实现。

什么是BLoC模式?

BLOC又名 usiness  GIC Ç omponents是在由Paolo苏亚雷斯和丛辉,呈现从谷歌一个设计图案DartConf 2018
最初,BLOC图案被设想以允许非常相同的代码独立于平台的的再利用:web应用程序,移动应用程序,后端。是的,开发这种模式的目的是减轻开发人员的工作量,同时以代码可重用性的思想为不同平台开发应用程序。观看下面的视频,以更深入地了解BLoC设定的婴儿步骤。

因此,如果您观看此视频,那么您将了解如何使用BLoC将大多数代码共享到不同的平台。

要详细了解BLoC,让我们首先了解Streams。

在一般意义上,流是任何事物的连续流动或连续。
例如,这是一群猫😛

FLUTTER中的BLOC模式
https://cdn-images-1.medium.com/max/720/1*ccPKTUTwZtt8HADzCtBLwA.gif

但是从技术上讲,Stream只是连续的数据流。
让我们以传送带为例传送带有两个末端,从一端传送(输入)物料,然后对其进行处理,经过处理后,它从传送带的另一端出来(输出)。

关键词:

– Stream,输送带称为流
– StreamController,这是控制流的
元素– StreamTransformer,这是处理输入数据的
元素– StreamBuilder,这是一种将流作为输入并为我们提供重建器的方法每当流有新值时
-接收器,接收输入的属性
-流,使输出从流中输出的属性

因此,现在我们对Streams有了一些了解。回到Flutter,我认为Flutter编码时遇到的主要障碍之一就是要处理UI以及其他所有内容,因为在Flutter中,我们没有针对UI的任何中介设计语言,就像在Android中我们拥有XML一样,在Flutter中,我们将所有代码都写在一个地方(传统上)。这就是BLoC发挥作用的地方,它可以有效地消除这种障碍。

– BLoC不仅解决了代码共享问题,而且还利用Streams功能来管理和传播Flutter中的状态更改。
– BLoC帮助我们将业务逻辑与UI分开。换句话说,UI组件应该只担心UI,而不必担心逻辑。
–因此,即使Flutter缺乏使用BLoC的UI的中间语言,也可以将彼此独立的这两种东西分开。
–如果您是Android开发人员,则将BLoC对象视为ViewModel,将StreamController视为LiveData。

这是什么意思呢?

正如已经讨论过的BLoC利用Streams一样,我们可以推断出以下几点,

FLUTTER中的BLOC模式
图片来源

–使用接收器属性获取输入
–使用流属性提供输出
–小部件通过接收器将事件发送到BLoC
– BLoC通过流通知小部件
–现在业务逻辑和UI组件已分离,我们可以更改以下内容的业务逻辑该应用程序随时对用户界面没有任何影响
–同样,我们可能会更改用户界面而对业务逻辑没有任何影响

为什么要使用BLoC?

既然您已经了解了BLoC是什么,那么您可能正在考虑在已经有其他几种处理方式时,为什么要使用它来进行状态管理,让我们对其进行讨论,看看为什么BLoC效率很高。

setState()

setState()方法通知框架对象的内部状态已更改。每当您更改State对象的内部状态时,请在传递给setState的函数中进行更改:

setState(() 
 { 
   _myState = newValue 
 }
);

调用setState会通知框架该对象的内部状态已更改,该方式可能会影响此子树中的用户界面,这将导致该框架安排此State对象的构建。

问题是:
–每次更改单个小部件的状态时,整个小部件树都会重新构建。
–分离UI组件和业务逻辑无济于事。

InheritedWidget

它是一种特殊的小部件,它在子树的根部定义了一个上下文,并且可以有效地将该上下文传递到该子树中的每个小部件。

如前所述,它可以
–在树中传播数据
–重建时更新小部件

FLUTTER中的BLOC模式

问题所在:
–状态设置为最终状态,这意味着它是不可变的。
–它不提供任何处置方法来释放资源并避免数据泄漏。

范围模型

它是Brain Egan维护的外部第三方软件包。它建立在InheritedWidget的基础上,提供了一种更好的访问,更新和变异状态的方法。它使您可以轻松地将数据模型从父窗口小部件传递到其后代,并且还可以在更新模型时重建使用该模型的所有子窗口。要检查是否有任何更改,范围模型使用一种方法通知监听器()

FLUTTER中的BLOC模式

问题所在:
–随着模型变得越来越复杂,很难跟踪何时应该调用notifylisteners()。

因此,上述所有方法都有一个或多个缺点,这并不是FLutter中状态管理的最佳方法,这就是BLoC模式在处理这些方法的所有缺点时都非常有效的地方。

观看视频以获得更好的视角,

什么时候使用BLoC?

要了解何时使用BLoC以及何时不使用BLoC,我们必须了解本地状态和全局状态的概念。

地方州与全球州

以您可能使用的示例为例:想象一个登录表单,用户必须输入用户名和密码,然后进行API通讯以验证身份验证的用户凭据。因此,这里和登录表单上的验证表单被视为本地状态,因为其范围仅适用于此组件,而其余的应用程序与此无关。由于用户身份验证所依赖的API通信被视为全局状态,因为它依赖于此身份验证,因此应用程序的整个范围都取决于该状态。

因此,基于不同方法的本地状态和全局状态范围是依赖的,请参见表以了解更多。

FLUTTER中的BLOC模式

Redux也是一种状态管理方法。最好建议用于处理本地状态BLoC,而对于全局状态BLoC则可能在应用程序简单但不太复杂但不建议使用时使用。对于全局状态,强烈建议使用Redux。

因此,本文为您提供了有关BLoC的必要详细信息,包括什么是BLoC,为什么使用BLoC以及何时使用BLoC,最后一个问题(即如何实现Bloc)将在完全不同的文章中介绍,其中将执行登录表单身份验证使用BLoC。

我们希望本文对您有所帮助,如果还有什么遗漏,请在评论中告知我们,以及是否需要其他内容让我们在Flutter中介绍。

喜欢 (0)

您必须 登录 才能发表评论!