在使用 flutter_bloc 库调度事件之前等待一些结果

2024-02-05

我正在尝试创建一个 BLOC,它依赖于另外两个基于时间的块和一个非基于时间的块。我的意思是基于时间,例如他们正在连接远程服务器,因此需要时间。它的工作原理如下:

登录(当然需要一些时间)

如果登录成功

做另一个过程(这也需要时间。它返回一个未来。)

登录且另一个进程完成后,让页面知道这一点。

我的 BLOC 取决于这三个:

final UserBloc _userBloc;
final AnotherBloc _anotherBloc;
final FinishBloc _finishBloc;

在映射事件到状态方法中,我应该调度相关事件。但是我不能等待它们是否完成。

_userBloc.dispatch(
  Login(),
);

_anotherBloc.dispatch(
  AnotherProcess(),
);

//LetThePageKnowIt should work after login and another process
_finishBloc.dispatch(
  LetThePageKnowIt(),
);

在发送某些东西之前有没有一种干净的方法来等待其他人?

我知道我使用了一种我不喜欢的方式。在我连接其中其他块的主块状态中,我有布尔值。

class CombinerState {
  bool isLoginFinished = false;
  bool isAnotherProcessFinished = false;

我正在主块的构造函数中监听时间相关块的状态。当它们产生“我完成了”时,我只是将布尔值标记为“true”。

MainBloc(
  this._userBloc,
  this._anotherBloc,
  this._pageBloc,
); {
  _userBloc.state.listen(
    (state) {
      if (state.status == Status.finished) {
        dispatch(FinishLogin());
      }
    },
  );

  _anotherBloc.state.listen(
    (state) {
      if (state.status == AnotherStatus.finished) {
        dispatch(FinishAnotherProcess());
      }
    },
  );
}

我为 main bloc 调度另一个事件,以在将 bool 设置为 true 后检查所有 bool 是否都为 true。

else if (event is FinishAnotherProcess) {
  newState.isAnotherProcessFinished = true;

  yield newState;

  dispatch(CheckIfReady());
}

如果布尔值为真,我调度 LetThePageKnowIt()

else if (event is CheckIfReady) {
  if (currentState.isAnotherProcessFinished == true &&
      currentState.isLoginFinished == true) {
    _pageBloc.dispatch(LetThePageKnowIt());
  }
}

我对这段代码不满意。我正在寻找一种方法来等待其他集团发送“完成”状态。之后我想发送我的 LetThePageKnowIt()


@pskink 的建议解决了我的问题。

我创建了两种返回 future 的方法。在它们里面,我只是等待我的流。这是登录流的示例。

在将事件映射到状态中,在分派之后,我等待异步方法。

_userBloc.dispatch(
  Login(),
);

_anotherBloc.dispatch(
  AnotherProcess(),
);

await loginProcess();
await otherProcess();

_finishBloc.dispatch(
  LetThePageKnowIt(),
);

在该方法中,我只是等待 userbloc 完成其工作并产生结果。然后返回。

Future loginProcess() async {
  await for (var result in _userBloc.state) {
    if (result.status == Status.finished) {
      return;
    }
  }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在使用 flutter_bloc 库调度事件之前等待一些结果 的相关文章

  • 使用 Flutter 基础类型而不使用 Flutter

    我需要在没有 Flutter 的环境中使用 lib package flutter foundation dart 中存在三种类型 他们是 ByteData ReadBuffer and WriteBuffer 是否可以在不依赖整个 Flu
  • Flutter Spotify Api 身份验证

    我需要在使用 Spotify api 的 Flutter 应用程序中对用户进行身份验证 我使用 flutter web auth 打开 WebView 并让用户在那里登录 我无法返回应用程序 在 Spotify 仪表板中 我将回调 Uri
  • 如何在 Flutter Provider 中删除 StreamController 中的数据?

    我正在使用provider来构建我的应用程序 因此数据被添加到StreamController中 每次刷新我的应用程序时 它都会调用API 然后将数据推送到StreamController 问题是如何在替换之前删除数据新的那一个 contr
  • 如何将额外的文本添加到颤振谷歌地图自定义标记中?

    问题是如何将自定义谷歌地图标记上的文本重叠与代表车辆登记号的文本融合在一起 我尝试使用此方法将文本叠加在图标上 生成器 上下文 gt 但根本不被认可 class MapsDemo extends StatefulWidget overrid
  • 扑。应用程序不会崩溃并发送崩溃报告

    我已经集成了Firebase Crashlytics在我的应用程序中 我正在测试 Android 应用程序 我强迫崩溃来检查它 if true List arr throw arr 1 2 我的问题是应用程序不会崩溃 我只是在日志中得到这个
  • 已发布的 Flutter 应用程序在启动时崩溃

    编辑 此问题的解决方案是将您的 flutter 版本升级到较新的 dev 版本 then 1 7 0 您还可以上传单独的 APK 版本 但我个人不喜欢这个选项 请确保您没有从 flutter github 开发存储库下载 错误的构建 因为那
  • 如何在 flutter 中仅显示列表中的 5 项

    我想在 flutter 中显示一个列表 我正在使用listView 问题是我只想显示 5 个项目 我的意思是当用户向下滚动时我想从开始索引中删除并将另一个小部件添加到包含我的小部件的列表的末尾 但是当我这样做时ScrollView 不会停留
  • 用颤动画布在形状上切一个洞

    如何使用颤动画布在形状上 切一个洞 我有一组相当复杂的形状 看起来像现实世界的物体 该物体上有一个圆角矩形形状的孔 我真的很想从形状中减去 RRect 但我找不到任何有关如何执行此操作的信息 canvas clipRRect myRRect
  • 如何展平列表?

    我怎样才能轻松地压平List在达特 例如 var a 1 2 3 a b c true false true var b 1 2 3 a b c true false true 我该如何转向a into b 即变成一个List包含所有这些值
  • Flutter:将字符串转换为 Map

    我正在使用 SQFlite 在本地存储数据 我有一个表 其中有一个名为 json 的字段 该字段的类型为 TEXT 并存储转换为字符串的 json 例如 name Eduardo Age 23 性别男 到目前为止 一切正常 但随后我需要从数
  • 未处理的异常:A 产品在处置后使用

    我在用着MultiProvider我收到此错误 Unhandled Exception A Products was used after being disposed Once you have called dispose on a P
  • 传递 Stack 中两个小部件之间的所有手势

    我正在开发一个应用程序 在地图上显示标记 如下所示 它的工作方式是标记在地图小部件 上方 呈现为Stack 我的问题是 目前 标记 吸收 用于控制下方地图的手势 如果手势在标记上开始 因此我想知道 有没有办法在堆栈中的两个小部件之间传递所有
  • 在 Flutter 中渲染小部件之前,如何等待异步函数完成执行

    On my main dart文件中 我想检查用户是否已登录 以便将他定向到适当的屏幕 我正在使用 SharedPrefence 来存储 Firebase 中的用户详细信息 如何告诉我的函数等到 SharedPreference 异步函数完
  • Flutter 深度链接

    据Flutter官方介绍深层链接页面 https flutter dev docs development ui navigation deep linking 我们不需要任何插件或本机 Android iOS 代码来处理深层链接 但它并没
  • Cloud Functions,删除Firestore SubCollections,是否需要AdminToken?

    我正在尝试构建可调用的云函数 当用户删除帖子时 它也会尝试删除评论 这是帖子的子集合 所以我看到了这个例子并像文档示例一样实现 const admin require firebase admin const firebase tools
  • 查找文本的确切边界

    我需要知道一段文本的确切边界 相当于获取文本边界 https developer android com reference android graphics Paint html对于安卓 我意识到这在某种程度上与 Flutter 的设计背
  • 如何在flutter中的命名路由中传递多个参数

    我正在尝试将多个参数传递给命名路由 我尝试了很多事情 但到目前为止还没有成功 谁能告诉我如何实现这一目标 路线 dart import package flutter cupertino dart import package flutte
  • 我实现了检查用户权限的方法,即使我在颤振中收到错误消息“MissingPluginException”?

    我实现了方法检查权限状态即使我收到一条错误消息 未处理的异常 MissingPluginException 在通道 flutter baseflow com permissions methods 上找不到方法 checkPermissio
  • 如何仅添加一个BottomNavigationBarItem

    我有一个 BottomNavigationBar 我只需要在其中添加一个集中按钮 但我收到此错误 package flutter src material bottom navigation bar dart 断言失败 第 191 行 po
  • Sliver Appbar [折叠工具栏] 在 Flutter 中从左到中心动画标题

    这是我的折叠工具栏的构建方法 override Widget build BuildContext context return SafeArea child CustomScrollView controller controller s

随机推荐

  • XACML 3.0 中的多重决策配置文件策略

    我需要为特定用户编写一个策略 它将返回如下 xacml 响应 该政策基于单用户 bob FirstName Create true Read true Update true Delete false MiddleName Create t
  • 这怎么可能:在 WaitOne 中处理 OnPaint

    我有一个ManualResetEvent 有一次 我使用等待该事件WaitOne 令我惊讶的是 我收到了一份OnPaint事件 而在WaitOne 这种情况也经常发生 堆栈跟踪如下所示 我明白了WaitOne会阻塞当前线程 并且在事件触发之
  • 如果Android中的应用程序被强制关闭,如何重置警报

    如果出现以下情况 我的应用程序使用 AlarmManager 设置的警报将被清除 用户在设置中强制关闭我的应用程序 一些任务杀手应用程序自动终止了我的应用程序进程 Android 本身杀死了我的应用程序 因为前端应用程序需要内存 请告诉我如
  • F# XML 多行文档,Visual Studio 2017

    我想添加一个多行 XML 文档 当我的鼠标悬停在它上面时 该文档将出现在 Intelli Sense 气泡中 参见示例 当我使用 Visual Studio 2015 时 以下代码可以工作 请参见下面的屏幕截图 但现在当我使用 Visual
  • 预加载组件

    在工作中 我们使用 DevExpress 作为用户界面 第一次打开使用 DevExpress 控件的表单时 会出现很长的暂停 在某些客户端上有时会出现 15 20 秒 在 Visual Studio 中 我可以看到该阶段正在加载大量程序集
  • CSS3可计算表达式?

    是否有任何技术允许在 css3 语句中使用表达式 通常 做以下事情是有帮助的 width 35 20px或类似的 目前 针对这些情况 我唯一的解决方案是重新设计页面或使用 javascript 动态设置 css CSS 关于值和单位的工作草
  • 调试类型初始值设定项中的异常

    我有一个静态类 没有静态构造函数 但有许多静态成员 第一次使用该类时 我抛出 TypeInitializationException 我正在打破 CLR 异常 并且已禁用 仅我的代码 问题是我只有在第一次使用这个类时才会得到这个异常 我不会
  • 如何在 ASP.NET MVC 5 中插入主从表

    I have Orders表和订单详细信息数据库中的表 通过 Entity Framework 6 我获得了一个模型 因此我可以从它生成类 我还从 Orders 表生成了控制器和视图 Orders folio PK date custome
  • ssl_transport_security.cc:599] 无法加载任何根证书

    我尝试使用 hyperledger composer fabric v0 19 0 创建自己的网络 网络构建似乎不错 但是当我执行composer network install 我收到这个错误 Composer Install Insta
  • 在 Spring 中使用 RestTemplate。异常 - 没有足够的变量可用于扩展

    我正在尝试访问 API 的内容 并且需要使用 RestTemplate 发送 URL String url1 http api example com Search key 52ddafbe3ee659bad97fcce7c53592916
  • XPath 在两个 HTML 注释之间进行选择?

    我有一个很大的 HTML 页面 但我想使用 Xpath 选择某些节点 div some text div div p Some more elements p div 我可以在之后选择 HTML using comment begin co
  • ImageView setImageBitmap 在 onTouch 内的复杂布局中间歇性地不执行任何操作

    我有内部包含 ImageView 的嵌套布局 这些都在 ScrollView 内 最初 ImageView 被设置为 Drawable 资源 我用这个解决方案来检测卷轴 它是从内部调用的onTouchListener Android 检测
  • openssl 命令行验证签名

    您好 我已经生成了密钥对并使用私钥生成签名 openssl rsautl sign in helloworld txt inkey aa pem out sig 但是我无法使用我的公钥验证签名 openssl rsautl verify i
  • Open XML: Word - 将所有段落标记为“Heading1”样式

    我使用Word 创建了一个带有标准normal dot 的Docx 作为测试 Hello world 级别的复杂性 我希望得到all the paragraphs其样式为 Heading1 style在Word中 我可以获取所有段落 但不知
  • 如何在 SQL Server 查询中显示表结构?

    SELECT DateTime Skill Name TimeZone ID User Employee Leader FROM t Agent Skill Group Half Hour AS t 我需要在查询中查看表结构 对于 SQL
  • numpy 数组中负数的立方根返回 nan

    来自 Numpy 文档 gt gt gt a np arange 10 3 gt gt gt a array 0 1 8 27 64 125 216 343 512 729 gt gt gt a 2 8 gt gt gt a 2 5 arr
  • 如何在php中将unicode字符转换为阿拉伯字符?

    假设该字符串是 uni str 06280628002006280628 阿拉伯语是 bab bab 那么 我如何在不使用 html 的情况下将其转换为 php for i 0 i
  • UnsupportedOperation:无法执行非零相对端搜索:Python - PyPDF2

    你们能解决这个问题吗 我无法阅读阿拉伯语 PDF 文件 我不知道是什么问题 谢谢 import PyPDF2 def main with open arabic text pdf encoding utf 8 as pdfFile pdfR
  • C++ 指向非静态成员函数的指针

    我读过很多关于非静态成员函数指针的帖子和答案 但看起来没有一个能够解决我的问题 因此 我创建了一个简短的示例来复制我的问题 即使这个示例可以以不同的方式 解决 对于最终的软件来说 保持示例中的结构很重要 谢谢 这是 Funcs h 类的标头
  • 在使用 flutter_bloc 库调度事件之前等待一些结果

    我正在尝试创建一个 BLOC 它依赖于另外两个基于时间的块和一个非基于时间的块 我的意思是基于时间 例如他们正在连接远程服务器 因此需要时间 它的工作原理如下 登录 当然需要一些时间 如果登录成功 做另一个过程 这也需要时间 它返回一个未来