通过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
相关产品推荐
相关产品推荐

