如何在 Flutter Native Channel 上等待 @escaping 关闭
How to await for @escaping closure on Flutter Native Channel
我有一个大问题,希望能找到有帮助的人。
我正在编写我的 Flutter 应用程序并使用原生 sdk。
其中之一是为我提供 http 客户端(swift 中的原生)和一些获取数据的方法。其中一种方法是带有逃避 void 闭包的 void 方法。
当我调用它时,我可以检查获取是成功还是失败。如果成功我想 return 到 Flutter bool true,或者如果失败我想 return false.
不幸的是,我不能 return 任何直接来自闭包的值,因为它是无效的。所以我试图将我的布尔结果从闭包中移出,在内部设置正确的值并在调用 return 之后让它颤动。
但它不起作用, return 在执行闭包之前被调用。
示例如下:
private func myNativeMethod(call: FlutterMethodCall) throws -> Bool? {
var result:Bool
client.fetchData(completion: { (res) in
switch res {
case .success():
result = true
case .failure(let error):
result = false
}
})
return result
}
经过一些研究后,我尝试使用 DispatchSemaphore、DispatchGroup,但调用 semaphore.wait() 完全冻结了我的应用程序,dispatchGroup.wait() 也是如此。
dispatchGroup.notify() 也是无效的,所以不可能在里面放入 return 语句。
将 semaphore.wait() 移动到另一个线程并不会阻止调用 return。
有没有人知道如何处理。
提前致谢。
不幸的是,这不是那么简单,您需要使用平台渠道。您可以在此处找到更多信息:
https://flutter.dev/docs/development/platform-integration/platform-channels
我有一个大问题,希望能找到有帮助的人。
我正在编写我的 Flutter 应用程序并使用原生 sdk。 其中之一是为我提供 http 客户端(swift 中的原生)和一些获取数据的方法。其中一种方法是带有逃避 void 闭包的 void 方法。 当我调用它时,我可以检查获取是成功还是失败。如果成功我想 return 到 Flutter bool true,或者如果失败我想 return false.
不幸的是,我不能 return 任何直接来自闭包的值,因为它是无效的。所以我试图将我的布尔结果从闭包中移出,在内部设置正确的值并在调用 return 之后让它颤动。 但它不起作用, return 在执行闭包之前被调用。 示例如下:
private func myNativeMethod(call: FlutterMethodCall) throws -> Bool? {
var result:Bool
client.fetchData(completion: { (res) in
switch res {
case .success():
result = true
case .failure(let error):
result = false
}
})
return result
}
经过一些研究后,我尝试使用 DispatchSemaphore、DispatchGroup,但调用 semaphore.wait() 完全冻结了我的应用程序,dispatchGroup.wait() 也是如此。 dispatchGroup.notify() 也是无效的,所以不可能在里面放入 return 语句。
将 semaphore.wait() 移动到另一个线程并不会阻止调用 return。
有没有人知道如何处理。
提前致谢。
不幸的是,这不是那么简单,您需要使用平台渠道。您可以在此处找到更多信息: https://flutter.dev/docs/development/platform-integration/platform-channels