我有一个 Flutter 项目试图在 Flutter 和 iOS Native 之间建立双向通信。到目前为止,它从Flutter到iOS都可以完美运行,但反过来却是沉默的。当我从 iOS 调用该方法时,没有任何反应。没有消息,没有错误,什么都没有。
我在iOS上创建MethodChannel ,如下所示:
let channel = FlutterMethodChannel(
name: "paymentview",
binaryMessenger: controller.binaryMessenger
)
channel.setMethodCallHandler({
(call: FlutterMethodCall, result: FlutterResult) -> Void in
if (call.method == "initialize") {
} else if(call.method == "authorize") {
}
})
在Flutter方面就像这样:
_channel = new MethodChannel('paymentview');
_channel.setMethodCallHandler(methodCallHandler);
Future<dynamic> methodCallHandler(MethodCall methodCall) async {
switch (methodCall.method) {
case 'authorized':
print("authorized");
return null;
default:
throw PlatformException(code: 'Not implemented', message: 'Not implemented');
}
}
在Flutter上,我调用这样的方法:
_channel.invokeMethod('authorize');
这很好用。在 iOS 中收到呼叫。但在 iOS 端,我调用这样的方法:
DispatchQueue.main.async {
self.channel.invokeMethod("authorized", arguments: nil)
}
在Flutter方面什么也没有发生。没有消息,没有错误,没有什么。我尝试了许多变体,创建多个通道(一种方式)、动态通道 id 等等,但它在Flutter上是无声的方面它是沉默的。有任何想法吗?
编辑:我已经从 iOS 端调试了它,它确实有效。我从我的 Dart 代码中得到返回值。但是,当我调试 Dart 代码时,没有遇到断点。如果我尝试修改 Dart 中的某些状态,则没有任何反应...
Edit2:当从 XCode 运行时,它似乎可以工作,使用 runner 项目,但在从 Android Studio 运行 Flutter 项目时却不行。