首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

【源码篇】Flutter Bloc背后的思想,一篇纠结的文章

之前在看Provider源码的时候,看的有些头痛,内部逻辑确实有些复杂,但是总流程理通,刷新逻辑清晰之后,那是一种酣畅淋漓的感觉!...= 0; } 效果图 [stream] 实际上,看了上述的使用,会发现有几个很麻烦的地方 需要创建Stream的一系列对象 Stream流必须要有关闭操作,所以要使用StatefulWidget StreamBuilder...emit做了一个判断,如果传入state和存储state对象相同,将不执行刷新操作(这就是我在State类里面,加clone方法的原因) 初始化了Stream一系列对象 封装了关闭Stream流的操作...流) BlocBase 储存了传入的state对象 初始化了Stream一系列对象 封装了关闭Stream流的操作 BlocBuilder 本质是StatefulWidget 通过BlocProvider...了 这边我用InheritedWidget手搓了一个 of方法和stream流的关闭都搞定了;不用手动关流,也不用写StatefulWidget了!

2.4K41
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    Flutter 实践 MVVM

    在做flutter开发时,刚学习时写的很随意,什么东西都写一起,也不去考虑解耦等问题。但是实际生产开发是不能这样做的,否则项目稍大就无法维护。...Dart提供了StreamController类,通过这个类可以很好的将Sink和Stream对应起来,操作也很方便,下文的实例中可以看具体的用法。...StreamBuilder也是一个Widget,其作用就是监听指定的Stream,一旦这个Stream中有数据来了,就调用builder中的闭包,用新的数据,重新构建这个widget。...,注释(1)处是StreamController创建的Sink,之所以用broadcast,是方便之后拓展,可能不只一个Stream监听这里的数据变化,使用broadcast可以让多个流监听同一个Sink...注释(2)处是对外暴露的Sink属性,网络请求回来后通过这里塞数据到流里。 注释(3)处是Stream,这里会对传入的数据做处理,然后返回给实际需要的数据。

    10.2K70

    Flutter 移动端架构实践:Widget-Async-Bloc-Service

    如果有需要,我们甚至可以执行高级的流操作,例如通过combineLatest将流组合在一起。 但是要明确: 1.如果需要以某种方式组合,我建议在单个BLoC中使用多个流。...服务层 Service类应该具有和BLoC相同的输入/输出接口。但是,Service和BLoC之间存在一个本质性的区别,那就是: BLoC可以持有和修改状态。 Service不能持有和修改状态。...中显示了一个对话框,这不是很好,因为builder只应该返回一个控件,而不是执行任何命令式的代码。...当然,正如我之前所说的: BLoC可以持有和修改状态。 Service不能持有和修改状态。 但是,他们向外暴露的API遵循相同的规则。...BLoC具有陡峭的学习曲线。要了解它们,您还需要熟悉Stream和StreamBuilder。 使用Stream时,需要考虑以下因素: 流的连接状态是什么(没有,等待,活跃,完成)?

    16.1K20

    在 Flutter 中探索 StreamBuilderimage

    假设您需要根据一个 Stream 的快照在 Flutter 中构造一个小部件,那么有一个名为 StreamBuilder 的小部件。...A stream 构建器,它可以将流中的多个组件更改为小部件 Stream 像一条线。当您从一端输入值而从另一端输入侦听器时,侦听器将获得该值。...initialData, required AsyncWidgetBuilder builder, }) 实际上,您需要创建一个 Stream 并将其作为流争用传递。...: 让我们创建一个流: 下面的函数返回一个每秒生成一个数字的 Stream。...建造函数称为 Flutter 管道的检测。因此,它将获得一个与时间相关的快照子组。这意味着,如果在实际上相似的时间里,Stream 发出了一些值,那么一部分值可能没有传递给构建器。

    2.5K00

    Flutter响应式编程:Streams和BLoC

    从值,事件,对象,集合,映射,错误或甚至另一个流,任何类型的数据都可以由Stream传递 。 ### 我怎么知道Stream传达的东西?...只要至少有一个活动侦听器,Stream就会开始生成事件,以便每次都通知活动的StreamSubscription对象: 一些数据来自流, 当一些错误发送到流时, 当流关闭时。...广播Stream 这是第二种类型Stream,这种Stream允许任意个数的监听器。 可以随时向广播流添加监听器。 新的监听器将在它开始收听Stream时收到事件。...然而, 一个InheritedWidget没有提供任何dispose方法,请记住,在不再需要资源时总是释放资源是一种很好的做法。...Sink时,会触发2个stream: outTotalFavorites流强制重建FavoriteButton,和 outFavorites流 强制重建MovieDetailsWidget(“最喜欢的

    4.2K90

    Flutter BLoC 异步通信、BlocBuilder的基本使用、BlocProvider的初探

    题记 —— 执剑天涯,从你的点滴积累开始,所及之处,必精益求精。 *** Flutter是谷歌推出的最新的移动开发框架。...中可用于异步通信的方案有如下: Provider ( Provider 异步通信、Provider状态管理) ValueNotifier 点击查看详情 Stream: StreamController...在Flutter项目开发中,一般的项目中,会有网络请求的代码与Widget构建的UI界面写一起,随着业务的不断积累,代码量也越来越大,维护的复杂度也会随着增加。...[在这里插入图片描述] 使用BloC模式,Flutter项目应用里的所有组件都在一个事件流,其中一部分组件可以订阅事件,另一部分组件则消费事件 [在这里插入图片描述] *** 2 BloC 的基本使用...(0); 5 MultiBlocProvider MultiBlocProvider是一个用于将多个BlocProvider合并为一个BlocProvider的组件。

    3.4K11

    主题色切换+国际化 三连

    很多Flutter状态管理文章都是改计数器,搞得总感觉用了反而麻烦。搞太复杂的例子,一篇文章又不现实。就拿主题色切换+国际化开刀吧。...---- 二、redux实现主题切换和国际化:flutter_redux: ^0.5.3 作为一个但数据源的全局状态管理库,redux采取标准的分封制。...ThemeData themeData; final int colorIndex; ActionSwitchTheme(this.colorIndex, this.themeData); } //切换主题理器...如果Stream流理解地较好,BloC用起来可以感觉是非常优雅的。个人还是比较喜欢redux。Provider作为官宣,也挺好用的。如果hold得住,混用也是可以的。...本文理解了,你的Flutter状态管理也只不过刚刚入门。之后还会有很长的路要走...

    3.4K20

    StatefulWidget的使用案例

    首先我们在VSCode中安装一个名为“Awesome Flutter Snippets”的插件,该插件提供了Flutter中各种常用的类和方法的快速构建方式,可以极大地提升开发效率,如下所示: 捷径...streamBldr Stream Builder StreamBuilder根据与指定交互的最新快照创建新的构建自身stream animatedBldr 动画生成器 创建动画生成器...指定的窗口小部件将child传递给builder statefulBldr 有状态的生成器 创建一个既具有状态又将其构建委托给回调的窗口小部件。用于重建窗口小部件树的特定部分。...snk 下沉 接收器是流的输入。 strm 流 异步数据事件的来源。流可以是任何数据类型。...debugP 调试打印 将消息打印到控制台,您可以使用flutter工具的logs命令(flutter logs)访问该控制台。

    3.3K20

    FlutterDojo设计之道—状态管理之路(三)

    通过Dart提供的Stream机制,Flutter可以很轻松的构建响应式的编程方式,同时也让跨页面、跨Widget的数据管理问题迎刃而解。 Flutter的响应式编程,具有下面几个特点。...UI Widget之间不再耦合,通过Stream管道获取数据,互相无依赖 借助Flutter的这个特性,Google在数据管理之路上提出了BLoC模式。...在UI层中,需要做的就是通过StreamBuilder来解析要监听的数据,StreamBuilder的builder函数是一个AsyncWidgetBuilder,它能够异步构建widget,其参数AsyncSnapshot...BLoC流的单播与广播 Flutter中的Stream分为两种,单播与多播,默认情况下创建的是单播Stream,这样的话,只能有一个StreamBuilder来监听,如果存在多个StreamBuilder...举个例子,比如在第一个界面在流中添加了一些数据,再打开第二个界面的时候,创建StreamBuilder之后,是无法直接获取流的最新数据的,因为这时候流中的的数据在StreamBuilder监听之前就已经结束了

    1.6K30

    Flutter混编工程之通讯之路

    EventChannel EventChannel用于在事件流中将消息传递给Flutter端。 EventChannel与MethodChannel一样,在Flutter中通过Name来进行标志。...child: StreamBuilder( stream: Accelerometer.readings, builder: (context, snapshot...流,并通过EventChannel传递给Flutter,首先,创建一个SensorManager,用来获取传感器的值,并借助EventChannel.EventSink将数据发出。...不过EventChannel有点点不一样,首先,它是由Flutter发起,交给原生侧处理后,再回调通知到Flutter进行处理,原生侧不能主动发起通信,所以不能算是完整的双向通信。...大部分的开发场景,我们都可以使用MethodChannel来解决通信问题 如果需要更加灵活的控制,我们可以使用BasicMessageChannel Flutter从原生获取数据流,可以使用EventChannel

    1.9K20

    Flutter | 事件循环,Future

    , scheduleMicrotask(() { print("Hello Flutter"); }); 复制代码 Future.microtask() //内部调用的也是上面的函数 复制代码 但是需要注意的是...**,如果是活跃的,则就可以获取他的值了 创建方式及常用的函数 使用 Stream.periodic 的方式来创建一个数据流,如上面的示例所示 读取文件的方式 File("").openRead()...controller.close(); StreamController 这种方式就比 periodic 创建的方式好多了,可以自由的往数据流中添加数据。...需要注意的是使用完成之后要进行关闭操作,否则就会泄漏资源 并且 flutter 会一直警告, 上面的这种方式只能有一个监听,如果添加多个监听则就会保存,那么如何添加多个监听呢,可以使用广播的方式,如下...((event) { print('Copy:$event'); }); //关闭后则不能进行任何添加操作 controller.close(); 而这种方式不会打印之前的数据。

    4.3K10

    CSA1.4:支持SQL流批一体化

    Stream Builder (SSB) 的第一个版本,它将丰富的 SQL 处理带到已经很强大的 Apache Flink 产品中。...我们需要灵活地处理批处理 API 和流 API 以及无缝读取和写入它们的连接性。我们需要进行试验、迭代,然后部署无需大量数据重放即可扩展和恢复的处理器。...Flink 的一点历史 Cloudera Steaming Analytics 由 Apache Flink 提供支持,包括 SQL Stream Builder 和核心 Flink 引擎。...SQL Stream Builder 满足有界查询 与 Flink 本身相比,SQL Stream Builder 最初是作为一个纯粹的流接口。...SQL Stream Builder 为物化视图提供了一个简单的 REST 接口,可以轻松地与笔记本内的 Python 和 Pandas 集成- 因此数据科学家可以专注于本地工具中的小而有价值的数据集,

    70810

    Flutter中的状态管理

    Flutter将组件分为StatefulWidget,StatelessWidget,自然有状态的组件使用继承Flutter将组件为StatefulWidget。...正如React中有基于context的社区库Redux,正式使用时候InheritedWidget相对比较基础,你需要写一大堆模版类的代码来满足需求,因此推荐使用flutter社区的库scoped_model...引用前端届的RxJS来说: Observable = lodash for async Flutter的官方语言Dart中内置了Stream的概念 Stream ~= Observable...因此不言而喻,就是将需要需要管理的State转化为Stream,然后使用Flutter官方的StreamBuilder来订阅所需要数据源,方便快捷,高效。...总结 上面的三种算是主流,官方推荐的Flutter 状态管理的方法了,Rx很强大,但是概念相对复杂,也相对难以掌控,Scope model的方式虽说有缺陷倒也上手容易,已经能很好的解决问题,初学者不妨从它来开始

    1.2K10

    Flutter完整开发实战详解(十一、全面深入理解Stream)

    一、Stream 由浅入深 Stream 在 Flutter 是属于非常关键的概念,在 Flutter 中,状态管理除了 InheritedWidget 之外,无论 rxdart,Bloc 模式,flutter_redux...,fish_redux 都离不开 Stream 的封装,而事实上 Stream 并不是 Flutter 中特有的,而是 Dart 中自带的逻辑。...通俗来说,Stream 就是事件流或者管道,事件流相信大家并不陌生,简单的说就是:基于事件流驱动设计代码,然后监听订阅事件,并针对事件变换处理响应。...StreamBuilder , 就可以完成 基于事件流的异步状态控件 了!...所以我们可以总结出: StreamController :如类名描述,用于整个 Stream 过程的控制,提供各类接口用于创建各种事件流。

    4K41
    领券