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

颤动BLoC -状态不会触发小部件重建

颤动BLoC是一种在Flutter应用程序中管理状态的设计模式。BLoC代表业务逻辑组件(Business Logic Component),它将应用程序的状态和业务逻辑分离,使得代码更易于维护和测试。

颤动BLoC的工作原理是通过使用流(Stream)和流控制器(StreamController)来管理状态。它将状态存储在流中,并通过流控制器来更新状态。当状态发生变化时,颤动BLoC会向订阅者发送新的状态,并且只有订阅者会收到更新,而不会触发整个小部件树的重建。

颤动BLoC的优势包括:

  1. 分离状态和UI:颤动BLoC将状态和UI分离,使得代码更加清晰和可维护。
  2. 可测试性:由于颤动BLoC将业务逻辑和状态分离,可以更容易地编写单元测试来验证业务逻辑的正确性。
  3. 状态共享:颤动BLoC可以在应用程序的不同部分共享状态,使得不同的小部件可以访问和更新相同的状态。
  4. 响应式更新:通过使用流和流控制器,颤动BLoC可以实现状态的响应式更新,使得UI能够及时地反映状态的变化。

颤动BLoC适用于需要管理复杂状态和业务逻辑的应用程序,特别是涉及到用户输入、网络请求、数据持久化等场景。它可以帮助开发人员更好地组织和管理代码,并提高应用程序的性能和可维护性。

腾讯云提供了一些相关的产品和服务,可以帮助开发人员在Flutter应用程序中使用颤动BLoC。其中包括:

  1. 腾讯云移动应用开发平台:提供了丰富的移动开发工具和服务,包括云函数、云存储、云数据库等,可以与颤动BLoC结合使用,实现状态管理和业务逻辑处理。
  2. 腾讯云消息队列(CMQ):提供了可靠的消息传递服务,可以用于在颤动BLoC之间传递状态更新消息。
  3. 腾讯云云原生应用开发平台:提供了一整套云原生应用开发工具和服务,包括容器服务、微服务框架等,可以与颤动BLoC结合使用,构建高可用和可扩展的应用程序。

更多关于腾讯云相关产品和服务的介绍,请访问腾讯云官方网站:https://cloud.tencent.com/

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

Flutter Bloc 官方文档(BlocBuilder翻译)

Bloc Widgets BlocBuilder BlocBuilder 是一个Flutter widget,它需要一个bloc和一个builder函数,BlocBuilder用响应 的新状态构建一个widget...,BlocBuilder和StreamBuilder十分相似,但是它有一个更简单的API来减少所需的样板代码数量,builder函数可能会被多次调用,并且应该是一个纯函数,它返回一个小部件来响应状态。...如果你想去做一些响应状态改变的事情,比如导航,显示dialog等等,你可以看一下BlocListener 如果BlocBuilder 省略参数bloc参数,BlocBuilder会自动找到用BlocProvider...buildWhen获取bloc前一个状态和当前状态,并返回一个布尔值。如果buildWhen返回true,那么将使用state调用builder,widget将重新构建。...如果buildWhen返回false,则不会调用带有状态的builder,也不会发生任何重建

1.3K10

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

该builder函数可能会被多次调用,并且应该是一个纯函数,它会根据状态返回小部件。 看看BlocListener是否要响应状态更改“执行”任何操作,例如导航,显示对话框等。...buildWhen获取先前的块状态和当前的块状态并返回一个布尔值。如果buildWhen返回true,builder将使用进行调用,state并且小部件将重新生成。...如果buildWhen返回false,builder则不会调用state且不会进行重建。...当需要将现有bloc用于新路线时,这将是最常用的。在这种情况下,BlocProvider由于不会创建bloc,因此不会自动关闭该bloc。...BlocConsumer仅应在需要重建UI和执行其他对状态更改进行响应的情况下使用cubit。

5.3K41
  • Flutter 的状态管理方案:setState、BLoC、ValueNotifier、Provider

    此示例 app 展示了如何使用各种状态管理方案处理加载状态。 主要导航 登录页面的主要导航是通过一个小部件实现的,该小部件使用 Drawer 菜单在不同选项中进行选择。...BLoC 加载状态可以由 BLoC 中,stream 的值表示。...,并在更改时重建 widget。...如下是他们的比较方式: setState ↔︎ 最精简的代码 BLoC ↔︎ 最多的代码 ValueNotifier ↔︎ 中等水平 所以 setState 方案最适合这个例子,因为我们需要处理单个小部件的各自的状态...在构建自己的应用程序时,你可以根据具体情况来评估哪个方案更合适 彩蛋:实现 Drawer 菜单 跟踪当前选择的选项也是一个状态管理问题: 我首先在自定义 Drawer 菜单中使用本地状态变量和 setState

    4.5K00

    Flutter响应式编程:Streams和BLoC

    “刷新”计数器; 我们不再需要State的概念,所有内容都通过Stream接收; 这是一个很大的改进,因为调用setState()方法会强制整个Widget(和任何子窗口小部件重建。...在这里,只重建StreamBuilder(当然还有子窗口小部件); 我们仍然在为页面使用StatefulWidget的唯一原因,仅仅是因为我们需要通过dispose方法释放StreamController...建议如下: (如果有任何业务逻辑)每个页面的顶部有一个BLoC, 为什么不是ApplicationBloc来处理应用程序状态? 每个“足够复杂的组件”都有相应的BLoC。...在BLoC级别,您还需要转换某些数据的“假”注入,以触发提供您希望通过流接收的数据。...Sink时,会触发2个stream: outTotalFavorites流强制重建FavoriteButton,和 outFavorites流 强制重建MovieDetailsWidget(“最喜欢的

    4.2K90

    Flutter BLoC 教程:使用 BLoC 模式的状态管理

    ✅ 简单应用不推荐使用 ✅ 有更多标准化代码,但可以通过扩展解决 Flutter BLoC 教程目标 我们将构建相关简单的应用,来演示 BLoC 如何使用流来管理状态,并为 bloc 编写一些测试。...ChangeTextEvent extends AppBlocEvent { const ChangeTextEvent();} 上面我们创建了一个 ChangeTextEvent,当按钮被点击后触发...✅ 它有一个 listener 的属性,用来监听状态的更改,并且能以特定方式对特定状态及其变化作出反应。 ✅ builder:职责是构建 UI,并且当状态更改时会重建。...blocConsumer 还包含了 listenWhen 和 buildWhen,正如其名称那样,它们可以根据指定的状态进行定制化响应 触发 Event 和 State class TextChangeController...总结 希望该教程对你开始学习使用 BLoC 模式管理状态有所帮助。

    72210

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

    e.markNeedsNotifyDependents() ,我都不会说这话。。。...我上面吐槽了很多,并非我对bloc有什么意见 Bloc我也用了较长的时间,深度使用过程,对其用法做了一些优化,还为其写了一个代码生成插件,为它也算付出了一些时间和精力 但是:代码是不会说谎的,所有好的或不好的都在其中...类中,实例了Stream流对象,来做Event的事件触发机制 添加Event事件时,会触发 _bindEventsToStates() 方法中的listener回调 _bindEventsToStates...listen回调,listen中,将state传emit中,然后触发刷新控件重建 总结 上面几个关键的类分析完,整个Bloc的运行机制,一下子就明朗了 BlocProvider 负责储存 传入XxxBloc...模仿Bloc的刷新机制,来手搓一个状态管理框架!用EasyC来命名吧!

    2.4K41

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

    【x1】微信公众号的每日提醒 随时随记 每日积累 随心而过 【x2】各种系列的视频教程 免费开源 关注 你不会迷路 【x3】系列文章 百万 Demo 随时 复制粘贴 使用 *** 在 Flutter...中可用于异步通信的方案有如下: Provider ( Provider 异步通信、Provider状态管理) ValueNotifier 点击查看详情 Stream: StreamController...buildWhen参数,用于向BlocBuilder提供可选的条件,返回 true,那么将调用state执行视图的重新构建,如果返回false,则不会执行视图的重建操作。...就可以,编这也有 Demo 点击查看详情 *** 完毕 以编的性格,要实现百万Demo随时复制粘贴肯定是需要源码的 BlocProvider Demo 点击查看详情 MultiBlocProvider...Demo 点击查看详情 当然以编的性格,肯定是要有视频录制的,目前正在录制中,你可以关注一下 西瓜视频 --- 早起的年轻人 随后会上传

    3.3K11

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

    建立在 Clean 架构的原则之上 4.编写 响应式 的 Flutter app时,该架构也能胜任 5.需要很少甚至没有样板代码 6.保证代码的可测试性 7.保证代码的可移植性 8.支持小型、可组合的小部件和类...服务层 Service类应该具有和BLoC相同的输入/输出接口。但是,Service和BLoC之间存在一个本质性的区别,那就是: BLoC可以持有和修改状态。 Service不能持有和修改状态。...与BLoC不同,Service不具有任何状态。...以下是我用Flutter和Firebase实现的身份验证流程的示例: [image] 观察到的结果: 当触发了登录事件,我们禁用了所有按钮并显示CircularProgressIndicator,我们将加载状态设置为...当Flutter重建窗口控件树时,处理嵌套的StreamBuilders会导致调试过程变得很棘手。 这些因素都会让代码有额外的开销。

    16.1K20

    初学者的 Flutter bloc

    flutter Bloc 是 Flutter 应用的其中一个状态管理。我们可以通过它很容易处理应用中所有可能的状态。...当我们使用 Flutter Bloc,我们要在应用中创建事件触发交互,然后 Bloc 会发射 emit 请求数据,存在在 state 中,在真实的场景中,它会像这样: 用户点击按钮来获取游戏列表 事件被触发...这个挂件不会重新构建视图,它只会监听。 BlocBuilder 通过这个挂件,我们能够根据它们的状态重新构建我们的挂件。...我们使用一个 BlocSelector 来控制这情形,当用户点击其中一个分类,事件将会被触发并且 bloc 将发射一个选中分类的 id 状态 isSelected,所以在 bloc selector 中...个人观点,我们更喜欢创建而美的 blocs 来使得我们的代码更加干净和可维护性,而不是使用大文件 bloc 来管理很多的事情,但是你的逻辑要求你那么做,你那么做会更好。

    13410

    Flutter 刷新页面:通过下拉刷新提升用户体验

    无论选择哪种方法,目标都是确保在触发刷新操作时,应用程序的状态能够反映新数据,而不会导致用户界面的中断或者不一致。...然而,对于很复杂的应用,我们可能需要使用状态管理解决方案,比如 Provider, Riverpod, BLoC, 或者 Redux,它们能够帮助我们更高效管理状态。...通过正确构建我们的挂件,我们确保 pull-to-refresh 手势被侦测到并有效处理,带来一个舒适的用户体验。...它可以从父挂件中获取数据,管理状态并在页面之间导航。当实现下拉刷新,我们经常需要 BuildContext 来触发状态的更改或者在刷新后导航到不同的屏幕。...这可能就要引入更先进的状态管理模式,比如 Bloc, Redux 或者 MobX,它们可以帮助我们更可预测性地管理刷新操作来触发状态更改。

    21710

    Flutter完整开发实战详解(十二、全面深入理解状态管理设计)

    在所有 响应式编程 中,状态管理一直老生常谈的话题,而在 Flutter 中,目前主流的有 scope_model 、BloC 设计模式 、flutter_redux 、fish_redux 等四种设计...当然,如果和 rxdart 结合可以简化 StreamController 的一些操作,同时如果你需要利用 BloC 模式实现状态共享,那么自己也可以封装多一层 InheritedWidgets 的嵌套...Store 内部是通过 StreamController.broadcast 创建的 Stream ,然后在 StoreConnector 中通过 Stream 的 map 、transform 实现状态的变换...现在再对照流程图会不会清晰很多了?...在 flutter_redux 中,开发者的每个操作都只是一个 Action ,而这个行为所触发的逻辑完全由 middleware 和 reducer 决定,这样的设计在一定程度上将业务与UI隔离,同时也统一了状态的管理

    2K20

    Flutter 绘制探索 4 | 深入分析 setState 重建和更新 | 七日打卡

    我们可以发现一个非常重要的地方,那就是 State#setstate 虽然会重建当前 build 方法下的节点,但是 RenderObject 对象是不会重建的,如下 RenderCustomPaint...在第一篇也说过,对于有 滑动 或 动画 需求的绘制,重建触发的频率非常大,此时即使对象是 轻量的,也会在短时间内创建大量对象,这样不是很好。...在两个判断之后,该元素的 _dirty 属性被置为 true,也就是元素标脏。...当认识到 ValueListenableBuilder 、FutureBuilder、StreamBuilder、AnimatedBuilder 这些组件的局部刷新,或者 Provider、Bloc 这样的状态管理提高的局部刷新组件...---- 就算是状态管理 Bloc 的 BlocBuilder 也是依赖于 setState 进行重新构建的。 ?

    1.8K20

    Flutter 桌面探索 | 自定义可拖拽导航栏

    如何在数据变化后触发更新。 状态管理的工具多种多样,但都不会脱离这两件本质的工作,不同的只是用法的形式而已。不必为了一些表面的功夫争论不休,而忽略问题的本质,适合自己就是好的。...---- 这里用我比较熟悉的 flutter_bloc 来对激活菜单数据进行管理。现在引入 Cubit 后,对于的数据进行管理变得非常方便。...通过 BlocBuilder 可以在变化到新状态时,触发 builder 回调,重新构建局部组件,实现局部刷新。...---- 在点击菜单是,触发 NavSelectionCubic 的 selectMenu 方法,更新状态数据即可。...菜单数据的状态管理 我们现在的菜单数据是写死的,对于可拖拽的功能,需要对这些数据进行修改和触发更新。所以菜单数据本身也就上升为了需要管理的状态

    2.3K20

    【Flutter&Flame 游戏 - 贰伍】pinball 源码分析 - 资源加载与 Loading

    由于这里是单独抽离的 AnimatedEllipsisText ,所以 setState 也只是局部的组件更新,不会影响触发外界组件的重新构建。...---- 最后,是加载页最核心的业务逻辑,该项目是通过 flutter_bloc 来进行状态管理的。...---- 这个 load 方法,会在 AssetsManagerCubit 构造时被立刻触发: ---- load 方法在有一个细节,一开始延迟了一秒钟才开始真正加载,这是因为加载是个昂贵的操作,先给出...---- 然后通过 _triggerLoad 局部函数对象,分三波依次触发这些异步任务。每次异步任务完成时,都会产出新的状态,让已加载的资源数加一。...---- 这样状态数据中的进度值 progress 就会变化,整个加载的小体系就得以运转,从业务逻辑到视图更新展示,可以体会一下,bloc 在其中的角色,品味一下状态管理的价值。

    79410

    【Flutter&Flame 游戏 - 贰柒】pinball 源码分析 - 角色选择与玩法面板

    也就是说,pinball 项目中,对这个模块进行了分包处理。可以思考一下:这个模块是相对独立的,而且有一定的拓展需求,比如增加其他的角色,可以在该包在进行处理。...因为使用了Bloc ,业务逻辑封装了,使用统一的事件接口触发。这里只需看一下何时触发 characterSelected 方法即可。这就是业务分层所带来的的好处之一。...所以关键就是该方法的触发时机: ---- 在 StartGameListener 中,会监听 StartGameState 状态的变化,如果是 howToPlay 状态,则会触发 _onHowToPlay...从这里可以看出 Bloc 处理可以根据状态来构建组件,也可以监听状态的变化,进行逻辑处理。...从中可以看出 bloc状态数据共享,以及状态变化监听中的价值。

    95540
    领券