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

【Flutter 专题】86 初识状态管理 Bloc (一)

和尚以前尝试过 provider 状态管理工具,简单便捷;但在新项目中,相关同学采用 Bloc 状态管理工具,且前段时间何时简单了解了 Stream 相关知识,因此趁机学习一下基本...在使用 Bloc 之前需要提前了解一下如下几个概念; Event Event 事件作为 Bloc 输入,一般是为了响应用户交互(例如按钮按下)或生命周期事件(例如页面加载)而添加它们。...async* 时可以使用 yield 关键字并返回一个 Stream 数据; Stream testStream(int max) async* { for (int i = 0;...初始化状态,该状态接收任何事件之前状态; mapEventToState 将 Event 作为参数,返回 Stream state 状态,通过 state 属性随时访问当前块状态;...TestCode 和尚尝试了最简单 Bloc,点击按钮会数字会递增,目前更新 UI 通过 setState() 方式更新数据,在下一节中会尝试用 FlutterBloc 方式进行数据更新

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

flutter_bloc使用解析---骚年,你还在手搭bloc吗!

flutter_bloc使用将从下图三个维度说明 [flutter_bloc] 前言 首先,有很多文章在说flutter bloc模式应用,但是百之八九十文章都是在说,使用StreamController...没办法,只能去blocgithub上去找使用方式,最后去bloc官网翻文档。 蛋痛,各位叼毛,就不能好好说说flutter_bloc使用吗?非要各种抄bloc模式提出作者那俩篇文章。...,后面自动带了一个逗号,格式化代码就三行了,建议删掉逗号,格式化代码。...,这些问题,刚开始使用时候,没异常感觉,但是使用bloc久了后,感觉肯定越来越强烈 state问题 初始化问题:这边初始化bloc里,直接在构造方法里面赋初值,state中一旦变量多了,还是这么写...,就能起到进入页面,初始化一次效果;add()方法也是Bloc类中提供,遍历事件时候,就特地检查了add()这个方法是否添加了事件;说明,这是框架特地提供了一个初始化方法 这个初始化方式在官方示例找到

4.8K41

flutter中使用BloC模式

image.png 传统开发方式,可以很明显看出来,其中网络请求代码和ui界面写了一起,日积月累,这里面的代码复杂度会随之增加,下面改造之后编写方式,将业务逻辑抽出来,放到了一个businessLogic...如何用BloC模式 上图描述,组件一些基本行为,【展示数据】,【发送事件】。...2、如果让我选择,我更加倾向于直接使用Bloc,最少代码完成需求,比起引入一个库,话费代价要少。 初学者疑问 1、想bloc发送事件一定需要通过另外一个streamController么?...我回答,必须有一个地方是的,就像弹吉他一样,根弦需要,其他不需要而且不能需要,因为如果次级页面也通过这种方式获取的话,那他销毁时,dispose被回调,这个bloc也就销毁了,一级页面的bloc也就不能用了...,还是很重要

17.4K82

【Flutter 专题】88 初识状态管理 Bloc (三)

和尚刚学习了 FlutterBloc 基本用法,使用场景还很简单,主要是单一 Bloc 应用,今天和尚继续尝试多个 Bloc 共用场景; 和尚继续完善前两节 Demo,...MultiBlocListener 对于多个 Bloc 场景,对于其 Bloc 监听也可以有多种方式; 方案一: 对应于 BlocProvider 方式,和尚合并前两种,尝试...小感想 和尚尝试了 Provider 和 Bloc 两种状态管理工具,均是对 Stream 操作,和尚认为各有各优势,不能互相替代; Bloc 方式最大优势把页面 UI 与业务逻辑拆分更清晰...,不管 MVC 或 MVP 方式都更方便融入应用;Provider 应用更加简单,无需考虑拆分情况; 和尚在了解源码时候发现一个有趣现象,FlutterBloc 也是对 Provider...现在针对状态管理方式还有很多其他方式,和尚认为无需强制使用某一种,选择适合自己对就好; ---- FlutterBloc 案例源码 ---- 和尚对 Bloc 尝试暂时告一个段落,对于更高级用法在实际应用中再进行尝试和学习

83041

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

view:页面 Cubit模式:该模式划分了三层结构 cubit:逻辑层 state:数据层 view:页面 作者在层次划分上还是很老道,state层直接写死在框架内部,这层必须要单独分出来;我感觉如果不是被大型项目的克苏鲁代码山坑过...我上面吐槽了很多,并非我对bloc有什么意见 Bloc我也用了较长时间,深度使用过程,对其用法做了一些优化,还为其写了一个代码生成插件,为它也算付出了一些时间和精力 但是:代码不会说谎,所有好或不好都在其中...魅力 BlocProvider一个非常重要控件,刷新参数精简和Stream流关闭都和其有关,因为该封装了一个Provider里面InheritedProvider;但是,但是在我看来,他依旧一个很有魅力控件...cancel(); super.dispose(); } } 来看下效果图:详细使用代码,请查看:flutter_use [builder] Event机制 如果使用Bloc模式开发,会多出一个...Stream使用,做了一个大大精简,基本使用痛点,全都封装起来,内部处理了 最后 留言板 Provider和Bloc源码解析终于写完了,就差最后一篇GetX了。。。

2.3K41

【Flutter 专题】87 初识状态管理 Bloc (二)

和尚前两天刚学习了基本 Bloc 状态管理,其中 UI 通过 setState() 方式更新数据,今天进一步了解进阶版 FlutterBloc 状态管理; FlutterBloc FlutterBloc...可以更便利实现 Bloc,主要是为了与 Bloc 共同使用而构建;同样需要提前了解几个概念;和尚继续以上一节中 Demo 进行扩展,添加了 Number 递增和递减; BlocBuilder...BlocBuilder 和尚理解为 Bloc 构造器,主要用于构建 Widget 以响应新状态,相较于 StreamBuilder 更便捷;可替代和尚上一节使用 setState(); const...Widget 用来响应状态变更; bloc 与 BlocBuilder 对应 bloc 用法相同,如果省略了 bloc 参数,BlocListener 将使用 BlocProvider 和当前函数自动执行查找...共同使用场景,对各方面理解还不到位,如有错误请多多指导!

93331

Flutter Bloc 官方文档(BlocBuilder翻译)

什么Bloc,为什么用Flutter Bloc 就不介绍了,直入主题。 ?...Bloc Widgets BlocBuilder BlocBuilder 一个Flutter widget,它需要一个bloc一个builder函数,BlocBuilder用响应 新状态构建一个widget...,BlocBuilder和StreamBuilder十相似,但是它有一个更简单API来减少所需样板代码数量,builder函数可能会被多次调用,并且应该是一个纯函数,它返回一个小部件来响应状态。...widget here based on BlocA's state } ) 如果你希望去提供一个特定bloc,而不是通过BlocProvider和上下文查找决定。...buildWhen获取bloc一个状态和当前状态,并返回一个布尔值。如果buildWhen返回true,那么将使用state调用builder,widget将重新构建。

1.2K10

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

使用详情 | StreamBuilder组件结合使用 | StreamBuilder 实现倒计时进度圆圈 EventBus (不考虑使用) Bloc BLoC 异步通信、BlocBuilder...BLoC模式可以将Widget构建UI代码与业务处理代码分离出来,在BLoC模式下应用程序,一般会有全局BLoC,每一个页面也会对应有一个独立BLoC。...[在这里插入图片描述] 使用BloC模式,Flutter项目应用里所有组件都在一个事件流,其中一部分组件可以订阅事件,另一部分组件则消费事件 [在这里插入图片描述] *** 2 BloC 基本使用...BloC一种架构模式也是一种编程思想,在Flutter中使用BloC时,首先要引入bloc库 dependencies: flutter_bloc: ^6.0.6 然后将依赖库拉取到本地 flutter...在这里使用Bloc模式开发一个时间计时器 运行效果如下图所示: [在这里插入图片描述] 首先来看程序入口,在这里使用到了 BlocProvider ,BlocProvider相当于一个组合者,它将 Bloc

3.1K11

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

请注意上图如何将单个控件连接到BLoC输入与输出,我们也可以使用这种模式将一个控件连接到输入,然后将另外一个控件连接到输出: [1240] 换句话说,我们可以实现一个 生产者-消费者 数据流。...更多关于BLoC信息 一个Async BLoC可以定义一个StreamController/Stream对,如果使用RxDart,则等效对应定义一个BehaviorSubject/Observable...如果有需要,我们甚至可以执行高级流操作,例如通过combineLatest将流组合在一起。 但是要明确: 1.如果需要以某种方式组合,我建议在单个BLoC使用多个流。...WABS使用简单异步方法来处理UI事件,而RxVMS使用 RxCommand。...流被单次还是多次订阅? StreamController和StreamSubscription始终需要被disposed。

16K20

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

创建BLoC业务处理类 BLoC一个业务逻辑处理类,不包含任何UI逻辑,且一个BLoC类只处理一种独立业务逻辑,在官方Demo中,业务逻辑有下面几个部分构成。...私有的model和StreamController 公开get方法返回Stream 公开业务处理函数 dispose函数 创建BLoC管理类 BLoC管理类一个通用处理类,借助StatefulWidget...在UI层中,有两种写法,一种直接使用StatelessWidget,在build函数中初始化BlocProvider.of(context),另一种使用StatefulWidget...这种方式做到了完全解耦,只要定义好BLoC接口和数据模型,前端展示UI,就完全和数据无关了。...所以这种情况下,要么在创建StreamBuilder前,初始化initialData值为流中最新数据;要么使用RxDart来强化流功能。

1.6K30

Flutter 状态管理方案:setState、BLoC、ValueNotifier、Provider

此示例 app 展示了如何使用各种状态管理方案处理加载状态。 主要导航 登录页面的主要导航通过一个小部件实现,该小部件使用 Drawer 菜单在不同选项中进行选择。...Scaffold: AppBar 标题选中项目名称 drawer 使用了自定义构造器 MenuSwitcher body 使用一个 switch 语句来区分不同页 参考流程(vanilla)...这里使用了 Provider 来获取 AuthService 对象,并将它用于登录。 札记 AuthService 一个对 Firebase Authentication 简单封装。...最后比较 上述三种实现(setState、BLoC、ValueNotifier)非常相似,只是处理加载状态方式不同。...如下他们比较方式: setState ↔︎ 最精简代码 BLoC ↔︎ 最多代码 ValueNotifier ↔︎ 中等水平 所以 setState 方案最适合这个例子,因为我们需要处理单个小部件各自状态

4.4K00

【Flutter 状态管理】第一论: 对状态管理看法与理解

也就是一个 面子 ,一个 里子 。 看花人并不会在意种子内部变化逻辑,他们只需满足看花需求就行了。 也就是说 界面表现 ,用来给用户看;状态本质 ,需要编程者去维护。...使用方式很简单,先创建一个 ValueNotifier 可监听对象 _counter。...这样在任何界面中都可以获取该 Bloc 及对其状态进行共享。 这是个比较小案例,可能无法体现 Bloc 精髓,但作为一个入门级体验还是挺不错。你需要自己体会一下: [1]....避免输入一个字符都请求接口。 注: debounce : 当调用动作 n 毫秒后,才会执行该动作,若在这 n 毫秒内又调用此动作则将重新计算执行时间。...repository 层作为数据获取方式完全独立,比如 todo 案例,Bloc 版和 Provider 可以共用一个 repository 层,因为即使框架使用方式有差异,但数据获取方式不变

1.2K20

我用flutter做了一个维基How中文版

有了API了,接下来,就创建项目,码代码就是了,看看项目结构 image.png main.dart工程入口; bloc目录说明我这个项目使用bloc设计模式,目录里放着各个业务逻辑bloc...,控制调用接口频率; flutter_bloc 就是一个bloc设计模式封装得比较好用库,我推荐使用这个; dio 网络请求框架,支持restful,请求结果也直接给解析成json了。...flutter_html 因为详情也有些地方内容html,因此需要使用一个展示html控件。...neeko&chewie&video_player 视频所需控件,不过我最后没使用neeko,还是chewie。...feature指令返回内容貌似一直没有变化,这样首看到内容总不发生变化,视乎有点枯燥无谓。

2.1K342

Flutter 入门指北(Part 13)之网络

HttpClient dart 自带网络请求方式,在 dart:io 包下。使用 HttpClient 作为请求分以下几个步骤: 1....),使用方式非常简单,创建一个 Dio 实例,然后就可以通过 get,post 等方式发起请求,返回 Future,而且支持多个并发请求,可以设置返回响应类型,监听上传下载进度等等...对于简单方式,这边就不做太多介绍,主要讲下拦截器,也是非常给力一部。比如我们需要请求这么个接口 https://randomuser.me/api/ ?...最后代码地址还是: 文章中涉及代码:demos(https://github.com/kukyxs/flutter_arts_demos_app) 基于郭神 cool weather 接口一个项目...,虽然跟着课上一些写代码,但是还是做了自己修改,很多地方看着不舒服,然后就改成自己实现方式了):flutter_shop(https://github.com/kukyxs/flutter_shop

1.3K20

Flutter响应式编程:Streams和BLoC

由于这可以对构建应用程序方式做出重大改变,我想要一个实际示例来说明: 很可能不使用它们,但有时可能更难以编码和性能更低, 使用它们好处同时也是 使用它们影响,正面的和(或)负面的。...StreamController 为了在Stream中插入一些东西,StreamController公开了一个名为StreamSink“入口”,可以通过sink属性访问 Stream 流出方式由StreamController...从上面来看,我们可以直接看到使用BLoC一个巨大好处。...只有一个限制...BLoC可访问性 为了使所有这些工作,BLoC需要可以被访问到。 有几种方法可以访问它: 通过全局单例 这种方式可以实现,但不是真的推荐。...由父级提供 使其可访问最常见方式通过父级Widget访问,通过StatefulWidget实现。 以下代码显示了通用BlocProvider示例。

4.1K90

一天搞定:Flutter + ChatGPT,打造智能聊天机器人

废话不多说,本项目直接使用开源flutter模版一钟初始化,并且在一天内实现了第一个可供使用版本,项目中提供macOS版本下载,其他版版本可以自行 flutter build xxx 方式打包。...优秀全局数据管理方式 flutter_bloc,完美的业务逻辑和界面UI代码分层隔离。flutter_bloc_test,bloc也可以mock测试,完全脱离界面耦合。...例如,我们可以使用Text和图片组件来展示文本消息和图片消息,第一个版本,先不考虑图片展示,仅仅显示代码以及普通文字,因此一个简单listview 就可以搞定,唯一细节要把和chatGPT对话内容已聊天形式呈现出来...,去问chatGPT API 接口查询4、因为我们需要实现打字效果,因此,调用流式API,这和我们平常调用API 接口方式有点不一样,平常是一次调用一次返回,而流式调用是一次调用多次返回,因此我们可以使用...dart stream API 来处理5、但是更好方式使用flutter_bloc ,这样,我们可以将界面UI 和 逻辑部分做到很好隔离,方便维护全局数据管理Flutter应用中可以使用Flutter_bloc

5K71

Flutter ——状态管理 | StreamBuild

} return ...没有数据时候返回控件 }, ) 下面一个模仿官方自带demo“计数器”一个例子,使用了StreamBuilder,而不需要任何setState...刚刚介绍了stream的如何使用,是不是感觉还是状态,实例代码仅仅是实例,如何应用到项目中呢?我们项目不仅仅是一个简单计数器,接下来我将结合项目,简单讲述一下如何使用streamBuild。...2.方法二使用状态管理bloc,如果使用bloc,streamBuild中stream 就因该传bloc数据,如果我其它地方使用使用了这个item,那么这个stream就应该传...,单独一个bloc去管理,我觉得为了一个按钮改变,去做很多操作,有点不值得了。...bloc+streamBuild,此时streambloc,不需要在dispose()方法中去关流,这样就可以放弃使用StatefulWidget了。

2.7K31
领券