如何通过平台特定代码实现Flutter向原生iOS(Swift)传递数据
Flutter 向 iOS Swift 端传递数据实现方案
你当前的代码已经完成了MethodChannel的基础通道搭建,只需补充Swift端读取参数的逻辑即可实现数据传递:
修正后Dart端代码
注意:如果
hello为字符串常量,需要添加引号包裹
static const methodChannel = MethodChannel('com.ios'); void openPaymentMethod() async { // 此处传递的字典{'text': hello}会同步发送到Swift端 String? result = await methodChannel .invokeMethod<String>('isSetUpAvailable', {'text': "hello"}); if (result != null) { print(result); } }
修正后Swift端代码
let METHOD_CHANNEL_NAME = "com.ios" let controller: FlutterViewController = window?.rootViewController as! FlutterViewController let methodChannel = FlutterMethodChannel(name: METHOD_CHANNEL_NAME, binaryMessenger: controller.binaryMessenger) methodChannel.setMethodCallHandler({ (call:FlutterMethodCall,result: @escaping FlutterResult) -> Void in switch call.method{ case "isSetUpAvailable": // 读取Flutter传递过来的参数 guard let args = call.arguments as? [String: Any], let textFromFlutter = args["text"] as? String else { result(FlutterError(code: "INVALID_ARGS", message: "参数格式错误", details: nil)) return } // 此处可直接使用拿到的textFromFlutter数据 print("从Flutter接收到的参数:\(textFromFlutter)") result("Success") default: result(FlutterMethodNotImplemented) } })
关键注意事项
- 两端的通道名称
com.ios、方法名isSetUpAvailable必须完全一致,大小写敏感 - Dart侧传递的基础类型(字符串、数字、字典、数组)都可以在Swift端直接对应转换,不需要额外编解码
- 如果传递自定义类,需要先序列化为字典或者JSON字符串再传输
内容的提问来源于stack exchange,提问作者Mohammed Nabil
相关产品推荐
相关产品推荐

