3

我有一个 Flutter 项目试图在 Flutter 和 iOS Native 之间建立双向通信。到目前为止,它从FlutteriOS都可以完美运行,但反过来却是沉默的。当我从 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 项目时却不行。

4

1 回答 1

1

正如评论中提到的,这突然开始工作而没有任何代码更改。我重启了我的 mac 几次,刷新了 Android Studio 等。突然它工作了。

于 2020-08-17T06:44:16.127 回答