Flutter 中使用 BLoC 的异步请求

2024-04-26

我想下载数据,但也一直使用该应用程序。

你能告诉我这是否是正确的解决方案?

情况是我们按下下载按钮并调用函数 bloc.dispatch(Event.download());

在 _Download 事件的 mapEventToState 中,我们请求数据。但我们不等待响应,因为我们不想阻止其他正在改变视图的事件。

因此,我创建 Future,并在收到响应后调用事件 _UpdateData(),在其中处理下载的数据并用它们生成状态。

没关系? 有 _requestTime 参数来检查是否是最后一次请求。

class Bloc {
  DateTime _requestTime;

  @override
  Stream<State> mapEventToState(Event event) async* {
    if (event is _Download) {
      yield DownloadingState();
      _request();
    } else if (event is _UpdateData) {
      if(!event.requestTime.isBefore(_requestTime))
        yield DownladedState(event.response);
    }
  }

  _request() {
    _requestTime = DateTime.now();
    repository.downloadData().then((response) {
      dispatch(_UpdateData(response));
    });
  }
}

让我知道它是否有效

更改在_request前面添加了yield*

@override
Stream<State> mapEventToState(Event event) async* {
if (event is _Download) {
  yield DownloadingState();
 yield* _request();
} else if (event is _UpdateData) {
  if(!event.requestTime.isBefore(_requestTime))
    yield DownladedState(event.response);
}
}

_request() async*{
_requestTime = DateTime.now();
repository.downloadData().then((response) {
  dispatch(_UpdateData(response));
});
}
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Flutter 中使用 BLoC 的异步请求 的相关文章

随机推荐

  • 更改 gltf 对象颜色的问题

    有了这个答案作为参考 我已经成功改变了gltf模型的颜色 更改 AR JS 中对象 dae 或 gltf 的颜色 https stackoverflow com questions 58589525 change the color of
  • Android 中什么原因导致 MotionEvent.ACTION_CANCEL?

    我正在调试 Android 上的一些触摸处理内容 并试图找出为什么 MotionEvent 发送到我的视图onTouchListener包含一个cancel行动 我无法找到任何有关其原因的文档 并且希望有人能为我指出调试此问题的正确方向 错
  • Neo4jClient - 从 Neo4jClient 中创建索引?

    有没有办法在 Neo4jClient 中创建索引 我已经完成了原始查询 但认为这不是最好的选择 我这样做的原因是出于测试目的 我需要删除 重新创建数据库来测试不同设计的性能 你可以做这样的索引 graphClient Cypher Crea
  • 在 div 标签中垂直居中图像[重复]

    这个问题在这里已经有答案了 可能的重复 图像垂直和水平居中 CSS https stackoverflow com questions 2478434 center an image vertically and horizontally
  • d3 单击时聚焦于节点

    我正在尝试实现一种力布局 其中单击节点将能够专注于节点周围的区域 我看过一些例子 但我收到一个错误 上面写着link bounds is not defined 我认为边界没有为力布局定义 并且适用于我从中获取聚焦功能的示例http bl
  • 获取表中两组不同行的计数,然后将它们分开

    我对 MySQL 很陌生 我正在尝试提出一个基本上可以执行以下操作的查询 select from tasks where completed 1 除以 select from tasks where completed 0 我已经找到了解决
  • 我可以定义一个具有与每个值的键对应的值约束的 Typescript 映射吗?

    In 这个游乐场 https www typescriptlang org play code KYDwDg9gTgLgBASwHY2FAZgQwMbDgQQCMBnGKHGfbGBCJOAbwCg44YBPMYALjlKmQBzANwtE
  • 由 VBScript 运行的 xPath 中的未知方法

    错误消息是 msxml3 dll 未知方法 Record CelloXml Integration Case ServiceEvent gt last 我的代码如下所示 错误出在案例上NEW Case OLD可以很好地配合 0 在那里 On
  • 为什么 lambda 比 IL 注入动态方法更快?

    我刚刚构建了动态方法 见下文 感谢其他 SO 用户 看起来 Func 创建为动态方法 IL 注入比 lambda 慢 2 倍 有谁知道具体原因吗 编辑 这是在 VS2010 中构建为 x64 版本的 请从控制台而不是从 Visual Stu
  • 添加新的 ApplicationBarMenuItem 图标时无法分配给属性

    我添加了一个新的ApplicationBarMenu带有图标的按钮到我的 wp7 项目中的页面 当尝试运行页面时我得到 无法分配给属性 Microsoft Phone Shell ApplicationBarIconButton Click
  • 为量角器安装特定的 chromedriver

    我在 CircleCi 上运行的 chrome 驱动程序遇到问题 问题是运行时 node modules bin webdriver manager update 然后使用以下命令检查 chromedriver 和 selenium 的版本
  • html中的有什么用?

    看起来它允许您编辑元素的内容 但实际上发生了什么 这个属性有什么用呢 编辑 参见here http www w3 org TR html5 editing html contenteditable 这通常用于富文本输入 虽然常规表单元素如
  • Python 代码中标识符错误中的无效字符

    对于以下代码 我收到 标识符中的无效字符 错误 显示错误时 第 3 行中的 http 会突出显示 我是Python新手 请帮忙 import requests import html r requests get http cricapi
  • “找不到符号:方法”但该方法已声明

    在我的驱动程序中 这一行给了我cannot find symbol错误 我不知道为什么 该方法在SavingsAccount类 我可以引用我的驱动程序中的所有其他方法 但不是那个方法 我尝试将类型更改为double等但仍然无法正常工作 Ac
  • 是否可以在 C# 中观察 Rss feed 变化?

    我想创建一个服务来监听一些 Rss 提要并将新提要解析为 json 以供进一步使用 是否可以观察饲料的变化 如果可以 那么如何观察 thanks 查看System ServiceModel Syndicate SynminationFeed
  • 检查 Laravel 控制器中的多个守卫

    我在 laravel 中创建了三种类型的守卫 我可以检查身份验证用户 但我们有一些对所有用户都相同的路由和控制器 我需要为每种类型的登录用户检查相同路由或控制器中的所有守卫 我的 auth php 文件看起来像这样
  • 如何在ios中以编程方式安排事件?

    我的任务是编写一个应用程序 允许用户安排将来发送的电子邮件 用户从日期选择器中选择日期时间 撰写消息和收件人 然后安排事件 当日期 时间出现时 消息就会被发送出去 有人可以指导我如何安排日程安排吗 比如说短信 我知道如何发送短信 只是不确定
  • AWS lambda 基本身份验证,无需自定义授权者

    我在为用 Node js 编写的 AWS lambda 函数设置基本身份验证时遇到问题 问题 AWS lambda 函数是附加服务的代理 该函数仅转发整个请求并向用户提供整个响应 这就是为什么我需要强制使用Authentication标题
  • 理解同构字符串算法

    我理解以下代码来查找字符串是否同构 该代码使用两个哈希值s dict and t dict分别 我假设字符串的长度相同 def isIsomorphic s t s dict t dict for i in range len s if s
  • Flutter 中使用 BLoC 的异步请求

    我想下载数据 但也一直使用该应用程序 你能告诉我这是否是正确的解决方案 情况是我们按下下载按钮并调用函数 bloc dispatch Event download 在 Download 事件的 mapEventToState 中 我们请求数