使用flutter_bloc库有什么缺点

2023-12-20

BLoC 模式的实现有很多版本。其中之一是 Felix Angelov 的 flutter_bloc。 在一个社交媒体上,我看到了这样的声明:flutter_bloc 对于该项目来说不是一个好的选择,应该选择另一个 BLoC 或另一个状态管理。

实际上,它是一个小型标准项目,分为多个层:领域、应用程序、基础设施和表示。没什么特别的。

所以那个抱怨错误选择的人是在说 flutter_bloc:

  1. 隐藏实施细节
  2. 保留一个状态对象(为什么,如果它确实有效,那么你就不会这样做),
  3. 意味着首选的使用方式mapToState- 使用async生成器而不是流

如果有人可以详细说明这一说法并列出使用 flutter_bloc 的真正缺点,我将非常感激。例如,对我来说,第 1) 点隐藏实现细节是一个优势,因为我不必直接处理 RxDart。但也许我错过了一些东西。我没有完全理解第2点。


flutter_bloc通过显式地将输入映射到状态来工作,否则无法工作。

我想你的朋友所说的“保留状态对象”是指任何时刻监听 che BLoC 实例状态的人都会返回相同的状态,这与你使用rxDart's BehaviorSubject.

我个人的看法flutter_bloc是它在复杂的场景中可能过于限制,因为它允许创建BLoC只处理一个输入和一个输出。

让我向您展示我在谈论这个问题时带来的典型例子。

假设您有一个页面,屏幕上半部分有一个轮播,其中有一些卡(假设这些是借记卡)。 屏幕的后半部分显示一个标签,其中包含卡的当前余额以及使用该卡进行的付款列表。

假设您需要从响应时间截然不同的两个不同 api 检索这两条不同的信息(余额将远远快于付款列表)。

对于这种情况我会使用一个BLoC with:

  • output stream用于卡片列表
  • input sink用于卡选择
  • output stream为了平衡
  • output stream付款清单

滚动轮播时,您下沉所选的卡片,然后两个小部件(平衡和列表)将侦听自己的流并相应地更新信息加载状态和数据。

如果你想使用 flutter_bloc 做同样的事情,你必须将其分成三个不同的部分BLoCs一定:

  • BLoC服务卡列表
  • BLoC以卡片作为输入,余额作为输出状态
  • BLoC以卡作为输入,以付款列表作为输出状态

我们当然可以谈论拥有三个独立的BLoC出于单一责任和可测试性原因,用于三个不同的信息,但是(再次,这是我非常非常个人的观点)在某些情况下,我认为最好将相同页面/功能的内容包装在同一个页面/功能中BLoC.

另外,在某些情况下(不是这种情况),您必须执行BLoC to BLoC沟通,这意味着拥有BLoCs 依赖于其他人BLoCs(在某些情况下这有点让我害怕)

我喜欢构建我的BLoC按功能对它们进行分组。

在上面的情况下,这些都是与借记卡信息屏幕相关的内容,如果我需要导航到某些详细信息,我可以这样做,将所有逻辑集中到一个中BLoC.

如果 BLoC 的部分功能可以在其他 BLoC 中通用BLoC我将概括地提取它们BLoC并与BLoC to BLoC沟通(如this https://gist.github.com/magicleon94/42837a1dda02111bb0abe0b9bf1cac58).

请注意,自从使用flutter_bloc forces你有多个BLoC即使可能没有必要,您也会因必须执行BLoC to BLoC沟通。

同样,我们可以说这个答案可能是biased,既然是我的一些个人观点,所以把它当作一堆考虑,而不是“法律”。我很乐意收到任何不同意我观点的人的反馈,因为我的BLoC哲学仍在不断进步,我经常对什么是最好的方法感到矛盾!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用flutter_bloc库有什么缺点 的相关文章

随机推荐

  • 尝试从 Account 获取AuthToken 时如何摆脱 java.lang.IllegalStateException

    我正在尝试获取authToken对于一个帐户但出现此错误 java lang IllegalStateException calling this from your main thread can lead to deadlock 这就是
  • 为什么没有多对多关系?

    我是第一次学习数据库和SQL 在我正在阅读的文本 Oracle 11g Joan Casteel 的 SQL 中 它说 关系数据库中不能存在多对多关系 我明白我们要避免它们 我也明白如何创建一个桥接实体来消除它们 但我试图完全理解 不可能存
  • JDBC 连接字符串语法和剖析

    多年来我使用 JDBC 连接到许多不同的关系系统 H2 HSQLDB MySQL Oracle Postgres 等 在每种情况下 每个系统seems有自己的连接字符串语法风格 我无法想象像 JDBC 这样历史悠久的 APIwouldn t
  • PHP-SQL:上传的图像显示为垃圾文本[重复]

    这个问题在这里已经有答案了 我已通过 phpMyAdmin 将图像和文本直接上传到我的表格 然而 在显示时 图像显示为垃圾文本 可能是什么问题 该图像是一个相对较小的 jpg 文件 这是代码
  • 在列表上使用条件 lambda 语句和 foreach 操作

    为什么我不能做这样的事情 如果我有一个List
  • 从Python字符串中删除大写字母[关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我想弄清楚如何使用Python从字符串中删除大写字母 但没有for loop 我试图在使用遍历列表时执行此操作while loop 那
  • 如何手动下载brew包进行安装?

    在中国意味着有时你无法通过brew升级来升级brew包 它会遇到这样的错误 curl 35 LibreSSL SSL connect SSL ERROR SYSCALL in connection to cli assets heroku
  • 简单的ajax调用似乎被阻塞

    非常简单的问题 我尝试测试我正在开发的 Restful Web 服务 并进行这个简单的 ajax 调用 使用 jquery
  • LINQ - 用distinct和orderby编写查询

    我对 LINQ 还很陌生 假设我有下表 Incident ID DeviceID Time Info 1 1 5 2 2009 d 2 2 5 3 2009 c 3 2 5 4 2009 b 4 1 5 5 2009 a 在 LINQ 中
  • 在 Dev-C++ 中的 GCC 内联汇编中定义字节(Windows 上 AT&T 语法中的 .ascii)

    下面的代码只是在屏幕上显示一个消息框 地址被硬编码以方便 int main asm xorl eax eax n xorl ebx ebx n xorl ecx ecx n xorl edx edx n pushl ecx n 0x0 pu
  • QObject 无法为位于不同线程中的父级创建子级

    您好 需要从后台进行一些套接字通信 我使用过QtConcurrent run对此 但给我警告 QObject Cannot create children for a parent that is in a different thread
  • 在非开发层预览邮件程序

    我在下面有几个邮件预览spec mailer previews On development我可以查看下面的所有预览 rails mailers 但是默认情况下 其他环境中不存在此功能 我想在staging环境并排队这篇文章在这里 http
  • Android中的缩放、旋转和平移操作后如何获取相对于Parent的View位置?

    我正在开发一项功能 其中包括图像缩放 旋转和平移操作 所有这些操作对我来说都运行良好 现在 我需要检查相对于父级的视图位置 我开发了以下代码来获取缩放和翻译后的视图位置 private fun findViewPosition view V
  • 如何在react.js中递归渲染子组件

    我想从其自己的组件中递归添加一个反应组件 我看到了这个例子这是通过子 TreeNodes 进行映射并以相同的方式添加子节点 不幸的是它对我来说根本不起作用 这个想法是有一个简单的评论组件 并且回复将重用相同的组件 var Comment R
  • 是否可以在 MatLab 中使用 .NET 应用程序?

    我对 C 感觉很熟悉 我将设计一个控制台应用程序 该应用程序将从 Web 服务中获取一些数据 我想让一组科学家使用 MatLab 中的数据 实现此目的的一种方法是将其存储在 HDD 上的文件中 然后将其内容加载到 MatLab 中 但这让我
  • getJSON 回调未触发

    我正在通过参与一个包括 SubSonic 和 jQuery 的测试项目来学习 asp net mvc 我遇到的问题是 每次我想要返回的不仅仅是简单字符串 例如 Json 对象 时 我都会遇到困难 因为回调似乎不会触发 或者返回失败 我获取数
  • 德语最好的 MySQL 排序规则是什么

    我正在用德语建立一个网站 所以我将使用像 等等 那么您有什么建议呢 这个答案已经过时了 如需完整的表情符号支持 请参阅这个答案 https stackoverflow com a 48325386 2898712 至于字符集 如果可以的话
  • Tibco - 最大流量限制属性

    我有一个启用了最大流量限制的进程 该值设置为 10 它是一个异步进程 用于每天获取数千条消息 我们注意到 在高峰期 随着EMS服务器队列中消息的增加 tibco进程的性能下降 Tibco 的速度缓慢与 EMS 消息流入的增加之间是否存在任何
  • std::vector 的比较运算符无法找到 T 的比较运算符

    以下非常简单的代码将无法编译 include
  • 使用flutter_bloc库有什么缺点

    BLoC 模式的实现有很多版本 其中之一是 Felix Angelov 的 flutter bloc 在一个社交媒体上 我看到了这样的声明 flutter bloc 对于该项目来说不是一个好的选择 应该选择另一个 BLoC 或另一个状态管理