使用Swift回调处理程序时,无法通过平台通道返回值



我正在与Flutter和Swift合作。我正在尝试使用AuthrizeNet SDK授权信用卡,不幸的是,它本身并不支持Flutter。为了解决这个问题,我在我的iOS AppDelegate中创建了一个平台通道,我成功地从Flutter接收了数据。我现在的问题是,如何从授权函数的回调处理程序(从AuthorizeNet SDK(内部返回数据?当试图调用Flutter结果函数时,Swift编译器会抛出以下错误:Escaping closure captures non-escaping parameter 'result'。这是我的代码:

handler!.getTokenWithRequest(request, successHandler: { (inResponse:AcceptSDKTokenResponse) -> () in
let paymentResponseModel: PaymentResponseModel = PaymentResponseModel.init(
token: inResponse.getOpaqueData().getDataValue(),
resultCode: inResponse.getMessages().getResultCode(),
tokenResultDescription: inResponse.getOpaqueData().getDataDescriptor(),
messageCode: inResponse.getMessages().getMessages()[0].getCode(),
messageText: inResponse.getMessages().getMessages()[0].getText()
)
result(String(data: try! JSONEncoder().encode(paymentResponseModel), encoding: String.Encoding.utf8))
}) { (inError:AcceptSDKErrorResponse) in
let paymentResponseModel: PaymentModelErrorResponse = PaymentModelErrorResponse.init(
code: inError.getMessages().getResultCode(),
message: inError.getMessages().getMessages()[0].getCode(),
details: inError.getMessages().getMessages()[0].getText()
)
result(String(data: try! JSONEncoder().encode(paymentResponseModel), encoding: String.Encoding.utf8))
}

我尝试过在getTokenWithRequest函数之外调用result函数的不同方法,但我无法使其工作。我是Swift编程的新手,所以如果这个问题很模糊或有一个简单的解决方案,我很抱歉。非常感谢。

问题是将来会调用successHandler(作为回调(,但必须立即调用result,并且必须立即从代码段的方法返回。那么,如何获得成功/错误响应呢?当令牌响应可用时,您必须从本机调用Dart。然后,在Dart端,当你可以更新你的应用程序状态和UI时,你必须等待,直到做出响应调用。

它变成了这样一个双向方法通道:

---token request--->
<---result----------
<---token response--
----result--------->

两个result都不包含太多信息,但可以用来传递错误。例如,如果第一个结果返回false,则表示出现了问题,并且Dart端不应该期望令牌响应——这不会发生。

最新更新