You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

通过iOS侧FlutterMethodChannel调用时Flutter端Future未执行问题

iOS调用Flutter异步MethodChannel无回调问题解决

问题原因

iOS端创建FlutterEngine后未启动其事件循环,导致Flutter侧的异步Future(比如Future.delayed)无法执行完成,进而无法向iOS返回结果。而同步Future(Future.value)无需等待事件循环调度,所以能正常返回。Android端的FlutterEngine创建后默认会启动事件循环,因此无此问题。

解决方案

在iOS代码中,创建FlutterEngine后必须调用run()方法启动Flutter的事件循环,确保异步任务能被处理:

修改后的Swift代码:

let engine: FlutterEngine = FlutterEngine(name: "theEngine")
// 启动Flutter引擎,初始化事件循环
engine.run()
let channel = FlutterMethodChannel(name: "theChannel", binaryMessenger: engine.binaryMessenger)

channel.invokeMethod("yep", arguments: nil) { result in
    if(result is FlutterError) {
        print("Error")
    } else {
        print("Success")
    }
}

额外注意点

  • 如果你的FlutterEngine需要关联UI(比如显示FlutterViewController),确保在run()之后再进行ViewController的初始化或关联,避免事件循环异常。
  • Dart侧的WidgetsFlutterBinding.ensureInitialized()要在设置MethodChannel之前调用,确保Flutter的基础环境已初始化,你的现有代码这部分是正确的。

内容的提问来源于stack exchange,提问作者Plumillon Forge

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.21 01:02:15