【问题标题】:Call Flutter from native iOS and get value back using Pigeon FlutterApi从原生 iOS 调用 Flutter 并使用 Pigeon FlutterApi 获取价值
【发布时间】:2022-10-21 01:18:32
【问题描述】:

我正在使用Pigeon 库来连接 Flutter 和本机平台代码,尤其是带有 Swift 的 iOS。

我想从 Swift 调用一个颤振函数并得到一个值,所有这些都是同步的。

Flutter 上的函数定义如下:

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

这里是斯威夫特代码:

let flutterApi: MyFlutterApi?

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

如您所见,该函数返回一个字符串(可为空),我需要来自颤振的字符串。

这个实现是不正确的。我从 XCode 的 return value -> Cannot convert value of type 'String?' to closure result type 'Void' 行得到一个 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
}

【问题讨论】:

    标签: ios swift flutter dart pigeon


    【解决方案1】:

    我也试过了。该文档在哪些部分是同步的方面具有误导性。根据我的尝试,没有办法让它在两端完全同步(Flutter - Native)。我还删除了文档中所述的 @async 标记,这也没有帮助。

    经过一些测试,获得响应的速度与来自 MethodChannel 的速度相同。 使用简单的字符串有效负载“测试”进行 1000 次调用,Android 模拟器上每次调用的速度为 550 微秒。 这意味着它甚至没有接近同步。

    【讨论】:

      猜你喜欢
      • 2021-09-15
      • 2021-03-08
      • 1970-01-01
      • 1970-01-01
      • 2020-06-01
      • 2019-08-31
      • 2020-07-05
      • 2021-07-22
      • 1970-01-01
      相关资源
      最近更新 更多