Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用Swift回调处理程序时无法通过平台通道返回值_Swift_Flutter_Authorize.net_Flutter Platform Channel - Fatal编程技术网

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

使用Swift回调处理程序时无法通过平台通道返回值,swift,flutter,authorize.net,flutter-platform-channel,Swift,Flutter,Authorize.net,Flutter Platform Channel,我正在与弗利特和斯威夫特一起工作。我正在尝试使用AuthrizeNet SDK授权信用卡,不幸的是,AuthrizeNet SDK本机不支持Flatter。为了解决这个问题,我在iOS AppDelegate中创建了一个平台通道,我成功地管理了从Flatter接收数据。我现在的问题是如何从授权函数的回调处理程序(从AuthorizeNet SDK)中返回该数据?尝试调用flatter result函数时,Swift编译器抛出以下错误:转义闭包捕获非转义参数“result”。这是我的密码: han

我正在与弗利特和斯威夫特一起工作。我正在尝试使用AuthrizeNet SDK授权信用卡,不幸的是,AuthrizeNet SDK本机不支持Flatter。为了解决这个问题,我在iOS AppDelegate中创建了一个平台通道,我成功地管理了从Flatter接收数据。我现在的问题是如何从授权函数的回调处理程序(从AuthorizeNet SDK)中返回该数据?尝试调用flatter result函数时,Swift编译器抛出以下错误:
转义闭包捕获非转义参数“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--------->
---令牌请求--->

谢谢你的回复!为了验证我是否理解您的答案,我需要在授权函数之前发送方法通道结果,然后一旦授权,使用另一个方法通道调用颤振函数(本机->颤振)?正确,除了你可以在相反的方向上使用相同的方法频道-无需创建不同的频道。然而,这是Android和iOS之间的一个特性差异。Android端完全能够异步返回令牌响应