当使用 BLoC 模式将业务逻辑与视图隔离(没有bloc 库)时,当 BLoC 中的某些异步逻辑完成时,我们如何触发一次性 UI 调用(例如显示小吃栏或警报对话框)?例如,如果网络请求失败,我们希望显示一个对话框,通知用户无法获取某些数据。
我探索过的选项是:
在小部件的构建方法中使用 aStreamBuilder来侦听来自块的事件,并在 StreamBuilder 的构建方法中显示对话框。这种方法的问题在于StreamBuildersbuild方法实际上不会在这里构建任何东西。我们只是要求 Flutter 显示一个对话框。我们可以返回一些看不见的“假”小部件,只是为了让 Flutter 高兴,但这确实很hacky。
使小部件有状态。在 中initState,订阅来自 BLoC 的错误流,并在侦听器中显示对话框。这里我们保持逻辑/视图的解耦,但据我所知,这个选项甚至不可行,因为我们不需要BuildContext显示对话框。
当小部件调用 BLoC 上的某些逻辑(可能会导致触发对话框的更改)时,请传入显示对话框的回调。在这里列出的选项中,我更喜欢这个。逻辑和视图仍然是相当分离的,但感觉有点奇怪。BLoC 模式中的数据流通常纯粹是“小部件 -> 通过接收器或函数的 BLoC”和“BLoC -> 通过流的小部件”。在执行某些逻辑后,让小部件要求 BLoC 调用回调(将数据传回)是违反此模式的。
我一直在避免使用 bloc 库(为了保持简单,以及其他原因)。然而,它似乎确实以其BlocListener. 有没有一种简单的方法可以解决这个问题,同时保持 BLoC 的核心原则?
我正在开发一个跨平台应用程序(iOS/Android/Web),并且喜欢移动设备上的 ML Kit 快速、廉价的设备上图像标签功能。有没有办法复制网络上的行为?ML Kit 模型是否可以与不同的 ML 库一起重复使用,以便重新调整用途?
我有一个 Firebase Cloud Function,可以解析一些 HTML 等内容。我测量了 HTML 解析方法本身,在 MacBook Pro 上的模拟器中大约需要 300 毫秒。部署到 Firebase 时似乎需要大约 4-8 秒,这对于我的应用程序来说不是可容忍的持续时间。
我正在使用 Dart 使用firebase_functions_interop编写我的 Firebase 云函数,并使用 Dart2JS 编译为 JS。在环境之间表现截然不同的方法实际上是 Dart 的内置 HTML 解析方法。我知道冷启动是云函数花费时间超过预期的常见原因,但这似乎不是罪魁祸首,因为我明确测量了解析 HTML 所需的时间,这就是我看到的巨大时间不同之处。
云函数在生产环境中的运行速度是否会比在 MacBook Pro 上慢得多?