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

使用通用BLoC提供程序和继承的小部件有什么区别?

使用通用BLoC提供程序和继承的小部件在状态管理和代码结构上有一些区别。

通用BLoC提供程序是一种状态管理模式,它将业务逻辑与界面分离,使得代码更加可维护和可测试。它通过将状态和事件分离来管理应用程序的状态,使用流(Stream)来传递状态变化,并通过Sink来接收事件。通用BLoC提供程序通常包含以下几个核心组件:

  1. BLoC:业务逻辑组件,负责处理业务逻辑和状态管理。它接收事件并根据事件进行状态转换,然后将新的状态通过流(Stream)发送给界面。
  2. 事件:触发状态变化的动作或事件,例如用户交互、网络请求等。
  3. 状态:应用程序的状态,可以是任何数据类型,例如布尔值、整数、对象等。
  4. 流(Stream):用于传递状态变化的通道,通常是一个广播流(BroadcastStream)。

使用通用BLoC提供程序的优势包括:

  1. 解耦和可维护性:通用BLoC提供程序将业务逻辑与界面分离,使得代码更加模块化和可维护。
  2. 可测试性:由于通用BLoC提供程序将业务逻辑与界面分离,可以更容易地对业务逻辑进行单元测试。
  3. 状态共享:通用BLoC提供程序可以在应用程序的不同部分共享状态,使得状态管理更加灵活和高效。

继承的小部件是一种传统的状态管理方式,通过继承小部件来管理状态。在这种方式下,小部件通常包含以下几个核心组件:

  1. 状态:小部件内部的状态,可以是任何数据类型。
  2. setState():用于更新小部件状态的方法,当状态发生变化时,需要调用setState()来通知框架重新构建小部件。

使用继承的小部件的优势包括:

  1. 简单直观:继承的小部件是一种传统的方式,对于一些简单的应用场景来说,代码结构相对简单直观。
  2. 快速开发:由于继承的小部件不需要额外的状态管理代码,可以更快速地进行开发。

然而,使用继承的小部件也存在一些局限性:

  1. 代码结构混乱:随着应用程序规模的增大,继承的小部件可能导致代码结构变得混乱,难以维护和扩展。
  2. 难以测试:由于状态和业务逻辑混合在一起,对于继承的小部件进行单元测试可能会更加困难。

综上所述,使用通用BLoC提供程序相对于继承的小部件来说,在状态管理和代码结构上更加灵活、可维护和可测试。对于复杂的应用程序或需要更好的代码组织和可测试性的场景,推荐使用通用BLoC提供程序。

腾讯云相关产品和产品介绍链接地址:

  • 云开发(云原生):https://cloud.tencent.com/product/tcb
  • 云服务器(CVM):https://cloud.tencent.com/product/cvm
  • 云数据库(CDB):https://cloud.tencent.com/product/cdb
  • 云存储(COS):https://cloud.tencent.com/product/cos
  • 人工智能(AI):https://cloud.tencent.com/product/ai
  • 物联网(IoT):https://cloud.tencent.com/product/iotexplorer
  • 区块链(BCS):https://cloud.tencent.com/product/bcs
  • 视频处理(VOD):https://cloud.tencent.com/product/vod
  • 音视频通信(TRTC):https://cloud.tencent.com/product/trtc
  • 网络安全(SSL):https://cloud.tencent.com/product/ssl
页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

Flutter响应式编程:StreamsBLoC

由于这可以对构建应用程序方式做出重大改变,我想要一个实际示例来说明: 很可能不使用它们,但有时可能更难以编码性能更低, 使用它们好处同时也是 使用它们影响,正面的(或)负面的。...()方法会强制整个Widget(任何子窗口小部件)重建。...由父级提供 使其可访问最常见方式是通过父级Widget访问,通过StatefulWidget实现。 以下代码显示了通用BlocProvider示例。...当然,这是非常可取。建议如下: (如果有任何业务逻辑)每个页面的顶部一个BLoC, 为什么不是ApplicationBloc来处理应用程序状态? 每个“足够复杂组件”都有相应BLoC。...应用程序使用任何InheritedWidget 该应用程序几乎是100%BLoCs / Streams驱动,这意味着大多数小部件彼此独立,并且它们在应用程序位置 一个实际例子是FavoriteButton

4.1K90

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

flutter_bloc使用将从下图三个维度说明 [flutter_bloc] 前言 首先,很多文章在说flutter bloc模式应用,但是百分之八九十文章都是在说,使用StreamController...使用框架,不拘泥框架,在观察者模式思想上,灵活使用flutter_bloc提供Api,这样可以大大缩短我们开发时间!...是Flutter窗口小部件,需要Blocbuilder函数。...它用作依赖项注入(DI)小部件,以便可以将一个块单个实例提供给子树中多个小部件。 在大多数情况下,BlocProvider应使用它来创建新bloc,这些bloc将可用于其余子树。...它用作依赖项注入(DI)小部件,以便可以将存储库单个实例提供给子树中多个小部件。BlocProvider应该用于提供块,而RepositoryProvider只能用于存储库。

5K41

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

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

4.4K00

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

BLoC 代表 Business Logic Components;它目的是从用户界面分离程序业务逻辑。使得应用程序代码更加优雅,可扩展可测试。...使用 BLoC 优点 ✅ 针对不同场景都有很出色文档 ✅ 从 UI 中分离业务逻辑,因此使得代码更容易理解 ✅ 使得产品更易测试 ✅ 容易跟踪应用程序经历状态 使用 BLoC 缺点 ✅ 其学习曲线有点陡峭...✅ 简单应用不推荐使用更多标准化代码,但可以通过扩展解决 Flutter BLoC 教程目标 我们将构建相关简单应用,来演示 BLoC 如何使用流来管理状态,并为 bloc 编写一些测试。...因为一个应用程序中会有很多事件,我们创建一个抽象类并继承它,并在需要处理传递多个事件给 BLoC 时进行扩展。...:我们使用它来提供我们 bloc 一个实例,通过在应用程序根替换它,这样我们在应用程序中都能获取它。 ✅ create:创建我们 AppBlocBloc 一个实例 BlocConsumer(...)

40810

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

那 界面 状态 什么区别联系呢? 比如说一颗种子发芽、长大、开花、结果、枯萎,这是外在表征,是外界所看到形态变化。...就这个案例而言,主要有两个事件: 自加 重置 。...repository 层也是通用,不管是 Bloc 也好、Provider 也好,都只是管理一种手段。...repository 层作为数据获取方式是完全独立,比如 todo 案例,Bloc Provider 可以共用一个 repository 层,因为即使框架使用方式差异,但数据获取方式是不变...我们在使用前应该明白: [1]. 状态是否需要被共享修改同步。如果否,也许通过 [State] 封装为内部状态是更好选择。 [2]. [业务逻辑] [界面状态变化] 是否复杂到分层必要。

1.2K20

Flutter Bloc 官方文档(BlocBuilder翻译)

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

1.2K10

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

基本使用、BlocProvider初探 *** 1 前言 BloC 全称是 Business Logic Component(业务逻辑组件),主要作用就是将业务逻辑UI组件分离开。...BLoC模式可以将Widget构建UI代码与业务处理代码分离出来,在BLoC模式下应用程序,一般会有全局BLoC,每一个页面也会对应有一个独立BLoC。...packages get 在Flutter BloC模式开发中常用组件BlocBuilder、BlocProvider、BlocListenerBlocConsumer等等。...在这里使用Bloc模式开发一个时间计时器 运行效果如下图所示: [在这里插入图片描述] 首先来看程序入口,在这里使用到了 BlocProvider ,BlocProvider相当于一个组合者,它将 Bloc...、事件、消费组合在一起,在本文章 第四小节详细概述,代码如下: ///flutter应用程序入口函数 void main() => runApp(BlocMainApp()); ///应用根布局

3.2K11

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

lock unlock 写法,被 lock 后,接下来请求会进入队列等待, // 直到 unlock 后才能继续,可以用于几个请求,后续需要用到前面的返回值情况使用 // 返回修改后...直接搜索就可以,如果用是 Vitual Code 或者别的不是 JetBrains 系列,这里个转换网址JsontoDart(https://javiercbk.github.io/json_to_dart...以上代码查看 http_main.dart 文件 实践一下下 不知道小伙还记得前面讲 BLoC 没有,忘了可以查看 Flutter 状态管理及 BLoC,这里结合 BLoC Dio 实现界面逻辑分离例子...content.isNotEmpty); return '${content.substring(0, 1).toUpperCase()}${content.substring(1)}'; } // 地址信息通用部件...) 如果对你帮助的话,记得给个 Star,先谢过,你认可就是支持我继续写下去动力~

1.3K20

flutter中使用BloC模式

更具我自己一点理解来看,实际上BloC设计模式,似乎MVP没有什么本质区别,两种设计模式最终目的就是为了把UI糅合在一起业务逻辑代码剥离开来,单独抽取到一层中。...在flutter中,实现BloC模式精髓就是, 展示数据从BloC中来,具体到了stream上,了stream到来,就可以使用StreamBuilder来构建ui了。...3、便面了setState方式来触发build,可能性能更好,注意,只是可能,因为这也是大佬们说,我并不太认可,实际上我认为,即便是使用streamBuilder,当streamdata时,也是触发了其包裹组件走...Redux相比大家也听过了,flutter中当然也是有的,那么,Bloc什么区别么?...1、个人觉得,并没有什么区别,都可以实现数据共享,大家也都能实现总线功能,redux理解难度上,似乎还要比Bloc更加复杂点,因为他概念会多一些。

17.4K82

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

事实上,一些状态管理技术被普遍使用: Scoped Model以其简单而著称 BLoC也被广泛使用,借助于StreamsRxDart,它适用于更复杂应用程序 在最近Google I/O大会上,Flutter...Flutter app时,该架构也能胜任 5.需要很少甚至没有样板代码 6.保证代码可测试性 7.保证代码可移植性 8.支持小型、可组合部件类 9.与异步API轻松集成(FuturesStreams...) 10.适用于体量复杂度逐步增长应用程序。...因此,在WABS中,我使用了一种名为 Async BLoC BLoC变体。 它BLoC一样,我们可以订阅输出流;但是,BLoC输入可以包括 同步接收器、异步方法 甚至 共同两者。...Provider为我们提供了一个简单灵活API,我们可以使用它来向控件树添加任何我们想要东西。它适用于BLoC、Service、数值甚至更多。

16K20

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

很明显,在两个不同界面中数据需要共享,很自然就会想到使用 状态管理 。 ---- 通过查看资源图片位置,不难发现,这里四种角色主题是在 pinball_theme 中提供。...---- 默认情况是 DashTheme ,想要知道角色主题是何时切换,也非常简单。因为使用Bloc ,业务逻辑封装了,使用统一事件接口触发。...,在功能上是没有什么区别的。...抽离组件可以让整体结构更加清晰,比如下面的红框中,代码组件界面的呈现,两者对应关系非常清晰。源码中处理方式,特别是官方提供源码,是非常值得学习借鉴。...---- 本文介绍了 pinball 游戏角色选择玩法介绍 两个模块。从中可以看出 bloc 在状态数据共享,以及状态变化监听中价值。

92540

「首席架构师推荐」最棒Flutter库,工具,教程,文章列表

网站/博客 欢迎来到Flutter - 英语法语博客,致力于为Didier Boelens提供有关Flutter大多数问题实用解决方案。...Norbert - Norbert515深度文章,功能应用程序创建。 Flutter Tips - DiegoVelásquez开发文章,提示技巧。...渲染对象 - 什么是窗口小部件,渲染对象元素?由Norbert515。 StreamsRxDart - 由Brian Egan演示Skillmatters。...具有时间轴分析 - 使用时间轴可以查找和解决Chinmay Garde在您应用程序特定性能问题。 HOWTO文档 视差效果 - Marcin Szalek视差非线性动画。...实践中颤动 - Zaiste为初学者程序提供免费视频课程。 Whatsupcoders - 由Kamal制作Flutter Widgets免费视频系列。

10.7K10

主题色切换+国际化 三连

搞太复杂例子,一篇文章又不现实。就拿主题色切换+国际化开刀吧。本文会说一下provoder、BLoCredux三种实现主题色切换+国际化实现方式,所以称三连击。 ?...继承自ChangeNotifier,将状态量作为属性,使用changeThemeData来方法改变状态量,并通知需要小伙伴们,让它们刷新。...---- 三、BLoC实现主题切换国际化:flutter_bloc: ^0.22.1 如果是redux是中央集权,地方分权,那么BloC就是完全自由民主。...一个BloC也有三大件:Bloc 业务逻辑单元、State状态、Events事件 ? ---- 1.主题色BloC 状态类 可以根据自己爱好写出自己风格。下面是我比较喜欢风格。...将状态量放在抽象类中,其他状态去继承他来实现状态分化。只要你想,也可以加一些常用状态。

3.3K20

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

创建BLoC业务处理类 BLoC类是一个业务逻辑处理类,不包含任何UI逻辑,且一个BLoC类只处理一种独立业务逻辑,在官方Demo中,业务逻辑下面几个部分构成。...私有的modelStreamController 公开get方法返回Stream 公开业务处理函数 dispose函数 创建BLoC管理类 BLoC管理类是一个通用处理类,借助StatefulWidget...同时,它也是数据UI粘合剂,用于将指定业务BLoC类注入到具体业务UI中。...在UI层中,两种写法,一种是直接使用StatelessWidget,在build函数中初始化BlocProvider.of(context),另一种是使用StatefulWidget..._countController = StreamController.broadcast(); 在多页面使用时候,个地方需要注意,那就是流是实时,不具有粘滞性。

1.6K30

flutter系列之:flutter架构什么,看完这篇文章就全懂了

而Flutter也是一样,虽然我们使用同一套dart代码编写了Flutter程序,但是需要不同命令编译成不同平台命令安装包。...最后是MaterialCupertino库,这些库使用widegts层中提供部件,组合成了不同风格控件集。 Flutter framework就是这样一层层构建起来。...于是Flutter提供了一个InheritedWidget类,如果我们自定义类需要共享数据给子Widgets,则可以继承InheritedWidget。...当然,除了InheritedWidget,Flutter还提供了很多状态管理工具,比如provider,bloc,flutter_hooks等,也是非常好用。...渲染布局 渲染就是将上面我们提到widgets转换成用户肉眼可以感知像素过程。 Flutter作为一种跨平台框架,它普通跨平台框架或者原生框架有什么区别呢? 首先来考虑一下原生框架。

85430

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

,应该不会有这么深执念[img] 这个state层加,我觉得相当必要,因为某个页面一旦维护状态很多,将状态变量逻辑方法混在一起,后期维护会非常头痛。...我上面吐槽了很多,并非我对bloc什么意见 Bloc我也用了较长时间,深度使用过程,对其用法做了一些优化,还为其写了一个代码生成插件,为它也算付出了一些时间精力 但是:代码是不会说谎,所有好或不好都在其中...,整个Bloc运行机制,一下子就明朗了 BlocProvider 负责储存 传入XxxBloc加以储存 提供of方法,可以在BlocProvider或其子节点位置,获取到储存XxxBloc 提供回收资源回调...使用 使用基本Bloc一摸一样 我本来想把emit俩个新旧state对象对比判断去掉,但是想想Bloc作者对这个理念好像很深执念,在很多地方都做了处理;所以,这边我也就保留了,也可以保留Bloc...Stream使用,做了一个大大精简,基本使用痛点,全都封装起来,内部处理了 最后 留言板 ProviderBloc源码解析终于写完了,就差最后一篇GetX了。。。

2.3K41

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

在所有 响应式编程 中,状态管理一直老生常谈的话题,而在 Flutter 中,目前主流 scope_model 、BloC 设计模式 、flutter_redux 、fish_redux 等四种设计...当然,如果 rxdart 结合可以简化 StreamController 一些操作,同时如果你需要利用 BloC 模式实现状态共享,那么自己也可以封装多一层 InheritedWidgets 嵌套...当然,更多功能更好拓展性,也造成了代码复杂度上手难度 ,因为 flutter_redux 代码使用篇幅问题,这里就不展示所有代码了,需要看使用代码可直接从 demo 获取,现在我们直接看...现在看起来使用流程是不是变得复杂了? 但是这带来好处就是 复用颗粒度更细了,装配功能更加清晰。 那这个过程是如何实现呢?后面我们将分析这个复杂流程。...而使用中我们组装 dependencies 最后都会通过 ViewService 提供调用调用能力,比如调用 buildAdapter 用于列表能力,调用 buildComponent 提供独立控件能力等

1.9K20

初学者 Flutter bloc

Flutter Bloc 很容易使用,因为我们和我们团队可以很快明白相关概念,不管你是什么水平,该库非常好文档很多案例,它在 Flutter 社区中是广泛使用那个,所以我们如果有任何问题,我们都可以在网络上通过简单搜索找到对应解决方案...这个挂件 listener builder 函数,所以我们可以一起使用。 BlocSelector 这个挂件允许开发者基于当前 bloc 状态选择一个新值指定更新。...Flutter 应用程序使用一个好状态管理器是必要。...Flutter bloc 是一个很好选择,正如你所看到,它并不复杂并且很容易理解怎么使用核心概念。并且,它提供了很多方法来管理我们视图挂件。...个人观点,我们更喜欢创建而美的 blocs 来使得我们代码更加干净可维护性,而不是使用大文件 bloc 来管理很多事情,但是你逻辑要求你那么做,你那么做会更好。

9610
领券