使用Pigeon FlutterApi从本机iOS调用Ffltter并取回价值

y4ekin9u  于 2022-10-23  发布在  Pig
关注(0)|答案(1)|浏览(258)

我正在使用Pigeon库来连接Ffltter和本机平台代码,特别是iOS和Swift。
我想从Swift调用一个颤动函数并得到一个值,所有这些都是同步的。
Flutter上的函数定义如下:

@FlutterApi()
abstract class MyFlutterApi {
    String? didSyncFunctionCalled();
}

以下是SWIFT的代码:

let flutterApi: MyFlutterApi?

public func callSyncFunction() -> String? {
    flutterApi?.didSyncFunctionCalled(completion: { (value: String?, error: Error?) in
        return value
    })
}

如您所见,该函数返回一个字符串(可为空),我需要从Ffltter返回该字符串。
此实现是不正确的。我在return value->Cannot convert value of type 'String?' to closure result type 'Void'行上从XCode获得一个error
据我所知,Pigeon总是生成带有错误的完成闭包的代码,并最终返回一个值。

这是我不想使用的解决方案:

public func callSyncFunction(completion: @escaping (String?) -> Void) {
    flutterApi?.didSyncFunctionCalled(completion: { (value: String?, error: Error?) in
        completion(value)
    })
}

有没有一种方法可以定义可以在本机代码中像这样使用的函数?

public func callSyncFunction() -> String? {
    let value: String? = flutterApi?.didSyncFunctionCalled()
    return value
}
ecbunoof

ecbunoof1#

只是同步返回数据,API的请求是异步的。它全部构建在方法通道上,因此异步功能并没有消失得更彻底。

相关问题