Bloc 是 Google 团队给出的一套反应式应用的开发架构 .. Bloc 是 Business Logic Component 的缩写,意思就是业务逻辑组件 .. 其实就是把应用里需要的一些业务逻辑单独拿出来,比如放在一个类里面 .. 这种类就是 Bloc ..
Bloc 里面会用到 Dart 里的 Stream .. 或者 RxDart 里的 Observable,它们其实是一种东西,只不过 RxDart 提供的 Observable 提供了更多的功能 ..
想要理解 Bloc 的用法,你需要先去了解一下 Stream 还有 RxDart 这个包 ..
在应用里面,用户与界面的交互可能会产生一些数据,在应用的其它的地方,可能会用到这些产生的数据 .. 比如一个购物车应用 .. 用户按了商品上的添加到购物车按钮 .. 应用的其它几个地方可能要做出相应的反应,比如更新一下购物车图标上的商品数量 .. 这里介绍的其实就是一个反应式应用,或者叫响应式应用 ..
在 StreamController 里面,Sink 的功能主要就是往 Stream 上添加数据。我们可以创建一个 Bloc,里面添加一个 Sink,然后在应用的界面上使用这个 Sink 往 Stream 上添加数据 ..
比如按了添加到购物车按钮以后,可以执行一下 Sink 上的 add 方法,往 Stream 上添加一个数据 ..
在 Bloc 里面,可以监听 Stream,当 Stream 上有数据的时候就做出反应 .. 它会输出 Stream .. 在视图层可以订阅,或者叫监听 Stream ,根据它上面的数据去构建小部件 .. 当 Stream 上的数据的变化以后,会使用新的数据重构这个小部件 .. 这里需要用的就是之前介绍 Stream 的时候, 用到的 StreamBuilder 这个小部件 .. 它可以根据 Stream 上的数据构建一个小部件 .. 数据有变化,小部件就会自动重建 ..