问题标签 [bloc]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
4 回答
5026 浏览

testing - Flutter:如何模拟 Bloc

我想嘲笑我的集团以测试我的观点。

例如,这是我的 Bloc:

这是观点:

现在,这是我的测试:

如您所见,我只是想测试一下,当用户在搜索中写一些东西并且他正在寻找的对象存在时,应该显示一张卡片。

0 投票
1 回答
1538 浏览

firebase - 在加载 Firebase 快照时使用 Flutter 中的 Bloc 流式等待和阻止其他事件

我正在使用 Flutter、Firebase Firestore 和 bloc 模式编写应用程序。

当应用程序打开时,我想从 firestore 数据库中加载一些书籍,为此我定义了以下 bloc 代码:

当应用程序启动时,我使用以下代码加载书籍集合:

当书籍加载时我会收到通知,但如果我发送另一个类似这样的事件:

该事件永远不会被处理,因为EditorBloc它仍在等待方法中的其他快照_loadBooks

我应该怎么做才能调度其他事件?

谢谢!

0 投票
2 回答
401 浏览

flutter - Flutter Bloc Design - 通知页面有关更改

对此有最佳做法吗?(我使用这个 Todo 示例,因为它更容易在这里解释我的问题)

  1. TodoOverviewPage(显示所有待办事项)
  2. TodoAddPage(添加待办事项的页面)

每个页面都有自己的 Bloc。

脚步:

  1. 从 TodoOverviewPage 我将 wuth pushNamed 导航到 TodoAddPage。
  2. 在 TodoAddPage 我添加了几个 Todos。
  3. 使用导航返回按钮返回 TodoOverviewPage

问题:我应该如何通知 TodoOverviewPage 有新的 Todos?

我不确定这是否是正确的方法。解决方案:

  1. 覆盖 TodoAddPage 中的后退按钮。添加“刷新=真”属性。
  2. 将 Bloc 从 TodoOverviewPage 添加到 TodoAddPage。并将状态设置为 TodoOverviewPage 将在构建后重新加载待办事项。

感谢您的阅读。

编辑1:

  • 添加我的临时解决方案,直到我找到更让我满意的东西。
0 投票
1 回答
444 浏览

dart - Flutter:我应该每页使用 BloC 类(UI/View)吗?

作为一名 Android 开发人员,我正在研究和开发一个颤振应用程序。

我不熟悉颤振、飞镖和 BloC 架构模式。无论如何,我正在将 BloC 模式应用到我的颤振应用程序中。

因为我学习了清洁架构,所以我也想应用清洁架构。第一次,我根据特性分离了 BloC 类。

我的玩具应用是 Todo 应用。

所以我有一个非常简单的功能,我将 BloC 定义为:

  • 创建待办事项 > CreateTodoBloc
  • 更新待办事项 > UpdateTodoBloc
  • 获取待办事项 > GetTodosBloc
  • 删除待办事项 > DeleteTodoBloc

在我的主页 UI/视图中,显示了待办事项列表,并且可以在用户完成待办事项时更新。

在这种情况下,主 UI/View 应该有两个 BloC:GetTodosBloc 和 UpdateTodoBloc

这可以显示待办事项列表,当用户点击待办事项的按钮时,待办事项被更新并保存到本地数据库中。

但问题是待办事项列表没有改变!我的主页 ui/view 根据待办事项的完整状态显示不同的待办事项列表。

看起来我的概念是错误的......为了解决这个问题,我认为我应该根据 UI/View 使用 BloC。

那么 Home UI/View 将只有一个块对象:“HomeBloc”。

并且“HomeBloc”可能会显示用户界面并更新待办事项。

所以...

我想听听其他开发人员的意见,并知道是否有另一种最佳做法。

0 投票
1 回答
2946 浏览

dart - Flutter:当我修改一个项目时,我的列表视图没有更新

我正在使用 BloC 架构模式开发一个“待办事项”颤振应用程序。

我的“主页”ui 显示待办事项列表,用户可以单击项目的按钮将状态从“待办事项”更改为“完成”。

当一个项目完成时,它应该以不同于其他未完成的待办事项的另一种颜色显示。

但是当我单击“完成”按钮时,列表视图不会更新。

下面是我的用户界面代码:

这是我的 BloC 课程:

0 投票
2 回答
1829 浏览

dart - 调用 StreamController.sink.add 时 StreamBuilder 没有反应

我的 Flutter 应用程序中有一个屏幕专门用于编辑对象列表。当您按下编辑按钮时,会弹出一个模式,允许您编辑对象值。当您关闭模型时,列表会通过 BLoC 刷新。但是,当调用刷新列表的方法时,什么也没有发生。

我知道数据已正确存储在数据库中,因为如果我转到上一个屏幕然后返回到编辑屏幕,数据就会更新。谁能帮我弄清楚为什么StreamBuilder不重建?

0 投票
1 回答
1094 浏览

flutter - Flutter_bloc 从没有 UI 事件的 firestore 获取更新的数据

我正在使用颤振从少数设备交换 Firestore 数据。

如果我使用 StreamBuilder 一切正常,但我不喜欢将业务逻辑与 UI 混合。我更喜欢使用 BLOC 作为使用 flutter_bloc 插件的模式。

水图像介绍

但是 flutter_bloc 以这种方式工作:

脚步:

  1. 事件 ------------------------> 新数据但没有新的 UI 事件

  2. 异步请求

  3. 异步响应

  4. 状态(mapEventToState)-------> ¿如何获得新状态?

至于我没有“UI 事件”,因为 Firestore 数据正在从另一台设备更新,我无法更新状态。

我可以在 bloc 构造函数上使用类似的东西:

但我认为这不是正确的方法。

¿ 有什么建议吗?

非常感谢。

J.巴勃罗。

0 投票
1 回答
210 浏览

flutter - Flutter:将数据传递给状态

我正在尝试将数据传递到启动 API 调用的块中,但出现错误:

“只能在初始化程序中访问静态成员”

这可能吗?我的方法完全错误吗?

我也尝试将其切换postid为静态,但不确定如何实际访问postid该状态。

代码:

我需要访问postid的状态:

建造:

0 投票
2 回答
3380 浏览

flutter - 如何在上下文之间共享集团

在使用showDialog(). 但是,如果我尝试像往常一样获取 bloc,通过从上下文中获取它_thisBlocInstance = BlocProvider.of<ThisBlocType>(context),我会收到一个错误,表明在此上下文中没有提供 bloc。

我认为这是因为showDialog()builder 方法为对话框中的小部件分配了一个新的上下文,这些小部件不知道我要查找的 Bloc,它在用户登录后立即实例化:

角落里有一个按钮,显示一个对话框:

在 EventDialog 中,我尝试再次找到带有上下文的块:

这失败了,并出现错误“在 null 上调用了 getter bloc”,或者,没有该类型的 bloc 附加到此上下文。

在使用 showDialog() 或导航到新的上下文之后,是否有某种方法可以仅从上下文中访问该块?

这是块提供者类:

0 投票
1 回答
312 浏览

dart - 为什么子小部件 StreamBuilders 没有收到错误?

我正在为 RxDart 苦苦挣扎(也许只是直接进行 Rx 编程)。我目前有一个有状态的小部件,它在它的didChangeDependencies(). 该调用发出并通过 http 请求获取数据并将其添加到流中。我正在使用BehaviorSubject,这很好用。我有使用 StreamBuilders 的子小部件,它们获取数据没有问题。我的问题在于处理错误。如果我的 http 请求失败,我会使用流水化流,addError('whatever error')但我的子小部件的 StreamBuilder 没有收到该错误。它什么也得不到。

所以我有几个问题。

  1. 这是预期的吗?
  2. 不应该在 StreamBuilder 中进行错误处理吗?理想情况下,如果出现问题,我想在 UI 中显示一些东西,所以不知道该怎么做。
  3. 我可以让我的孩子小部件有状态并使用stream.listen. 我确实收到了那里的错误,但是拥有它和 StreamBuilder 似乎有点过头了。
  4. 我在这里遗漏了一些关于流和错误处理的基本知识吗?

这是我的集团:

简化的父小部件:

带有 StreamBuilder 的简化子小部件: