【发布时间】:2021-06-26 07:41:59
【问题描述】:
我正在调用一个本地 SDK,它会关闭并执行一些 API 调用,这显然是有时间限制的工作。对于这项工作的 90%,我使用双向回调和方法通道调用,以便 Dart 可以调用 Swift,然后 Swift 可以在完成后调用 Dart。
我遇到的问题是当我想要同步等待 API 响应(或超时)。
我进行了一些测试,因为我原本打算推迟发回 FlutterResult 直到 Swift 回调被击中,但这严重减慢 UI,因为我相信所有平台在 UI 线程上进行调用。我模拟了 10 秒的响应时间,应用程序将完全挂起几秒钟,然后再次响应,如果我向其中一些请求发送垃圾邮件,应用程序将挂起 10 秒以上。
我对运行同步平台代码的最佳方式有点困惑,因为我认为平台代码不能从隔离中调用。
我想要
- 获取用户详细信息
- 用户按下按钮
- 等待时显示动画
- 获得响应并继续前进。
等待时显示动画当然是卡顿的部分。我不完全确定为什么要么因为运行常规 CPU 工作,无论其本机或飞镖肯定不应该冻结渲染引擎?
反正我能想到的只有:
- Dart 调用平台方法 A
- 将标志
AwaitingMethodA设置为 true - 立即返回 FlutterResult 但在 Swift 中设置回调
while (AwaitingMethodA)....- 当 Swift 中的回调命中时,跳转到 UI 线程并将消息发送回 Dart 说完成,这会将 AwaitingMethodA 设置为 false
- Dart 代码继续......
^ 如果需要,我可以为上述设置一个超时计时器以打破循环。
这种方法有什么问题吗,或者对于同步的、有时限的平台工作是否有更好的约定?
【问题讨论】:
标签: swift flutter dart flutter-method-channel