使用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库有什么缺点 的相关文章

  • 更改 Flutter Web 应用程序中的屏幕尺寸

    我正在使用 Flutter 构建一个 Web 应用程序 但我想模仿 iPhone 屏幕视图 我知道调整窗口大小可以达到这种效果 但是有没有办法将所有内容包装在手机屏幕图形的框架中 或者更改 MaterialApp 的尺寸 使其包含在手机屏幕
  • Flutter:如何在 Web 视图中启用手势?

    我想在 Flutter 中通过捏合和张开来放大我的网页视图页面 我在网上做了一些研究 我在某处发现了这个 虽然 WebView Android 和 UIWebView iOS 内置了捏合和缩放功能 但它们需要 打开 在Android中 插件
  • Dart如何向字符串数字添加逗号

    我正在尝试适应这一点 在数字字符串中插入逗号 https stackoverflow com questions 721304 insert commas into number string在 Dart 工作 但没有运气 其中任何一个都不
  • 未为“AudioCache”类型定义“play”方法

    问题 未为 AudioCache 类型定义 play 方法 导入 包 flutter material dart 导入 包 audioplayers src audio cache dart void main runApp Xylopho
  • Firebase云函数在Flutter中返回null,因为它仍在运行

    更新 我从我的 firebase 控制台得到这个 函数执行花费了 2906 毫秒 完成状态代码 200 15 秒后 我得到 console log DOC 确实存在 我正在运行这个云火库功能 它 有效 但我不断得到这样的回报 FLUTTER
  • Flutter textfield Flutter RTL光标位置问题n-1

    我不知道这个问题是否是老问题 但我尝试了所有方法都没有成功 在输入字段中选择字母 n 时出现的问题 光标跳转到 n 1 包含视频中显示的问题 仅在 RTL 中存在问题 该链接包含问题的代码和视频 代码 链接在这里 https github
  • 如何使用 SingleChildScrollView 使 Stacklayout 可滚动?

    我正在尝试使用 SingleChildScrollView 使堆栈布局可滚动 但它不滚动 这里应该使用SingleChildScrollView吗 我想我已经给出了足够的描述 可以让任何人理解我的问题 这里有更多文本以满足 StackOve
  • Flutter,在第1页时无法点击第2页

    我创建了一个PageView有 3 个页面 每个页面都有一个按钮 单击每个按钮应滚动到该页面 如果在第 2 页 则上一页和下一页都是可点击的 如果它位于第 3 页 则可以单击上一页 如果是在第一页 下一页不可点击 更新 当在 page1 上
  • 对于哪些 flutter 小部件我们需要使用 const?

    我了解的好处const并且小部件不会在状态更改时重建 但当您看到下面的代码时 仍然很明显它们是常量 我希望 flutter 自动处理它 或者 flutter 已经在处理它而我却没有意识到 This makes sense to me but
  • Dart:快照与 AOT

    我正在搜索很多关于这种伟大语言的信息 并找到了这个页面https github com dart lang sdk wiki Snapshots https github com dart lang sdk wiki Snapshots但它
  • 如何在 web 和 android 的 flutter 中使用 cloud_firestore ?

    我有一个 Flutter 应用程序 可以按预期在 Android 上运行 但如果我想将其编译为 Web 版 则会出现错误 它必须与依赖项 cloud firestore 做一些事情 如果我使用依赖项 firebase 它在网络上运行良好 但
  • CustomPainter 使用 Listenable 重绘

    CustomPainter 类似乎有几种触发重绘的方法 我让我的画家使用 shouldRepaint 方法 但是 我希望我的画家对可监听中的更改做出反应 而不是轮询更改 Flutter 文档指出 触发重绘的最有效方法是 扩展此类并向 Cus
  • 如何在 Flutter/Dart 中使用带有基类的 Provider

    我有这样的基类和派生类 abstract class A extends ChangeNotifier class B extends A 我正在使用这样的提供者 ChangeNotifierProvider b create contex
  • 构建 FutureBuilder 时抛出 _TypeError(脏,状态:_FutureBuilderState 类型“Null”不是类型“List”的子类型

    我已经处理这个问题很长时间了 我正在尝试解析 JSON 并将其转换为列表视图 我收到响应正文 它也被转换为列表 但它向未来的构建器发送 null 我收到此错误 小部件库捕获的异常 构建 FutureBuilder dirty state F
  • 尝试将 Flutter 应用上传到 ItunesConnect 时出现 UIWebView 错误

    我正在尝试将我的应用程序上传到应用程序商店 但是我不断收到错误消息 表明我的应用程序存在此问题 ITMS 90809 已弃用的 API 使用 不再接受使用 UIWebView 的新应用程序 相反 使用 WKWebView 可以提高安全性和可
  • 在 flutter 中使用 Cloud Firestore 创建无限列表

    我目前正在将 Cloud Firestore 与 Streambuilder 小部件一起使用 以便使用 Firestore 文档填充 ListView 小部件 new StreamBuilder
  • MappedListIterable 不是子类型

    我是 flutter 和 dart 的新手 并尝试从 firestore 作为流获取数据并将其提供给我的 ListView 但我不断收到此错误 type MappedListIterable
  • 颤振动态形式无法正常工作

    在我的应用程序中 我想创建一组动态表单 用户可以在其中添加更多项目 在这种动态形式中 它由两个文本字段 1 电话字段 2 电子邮件字段和一个下拉字段组成 但我尝试的任何事情都无法正常工作 我已经要求修复我的代码 但没有得到答复 堆栈溢出问题
  • 带操作按钮的颤动本地通知

    我在我的 flutter 项目中尝试了 flutter 本地通知插件 它在简单通知上工作正常 但我需要带有操作按钮的通知功能 请帮助我或建议我实现此功能 不幸的是 flutter local notifications 插件尚不支持操作按钮
  • 哪些 Flutter 插件或功能可以利用外部 iOS/Android 显示器来显示与主显示器不同的内容

    我正在构建一个跨平台应用程序 需要在外部显示器上显示不同的视图 通常通过连接到 LCD 投影仪的 HDMI 适配器电缆连接 Flutter 是否能够在内置的外部显示器上显示不同的屏幕 在现有的 Flutter 插件中还是使用现有的 Flut

随机推荐

  • 尝试从 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 或另一个状态管理