Flutter iOS 插件中未调用“handle”函数

Sha*_*wal 5 swift flutter flutter-plugin flutter-ios

我们创建了一个 Flutter 插件,其中 iOS 代码是用 Swift 编写的 -

import UIKit
import CooeeSDK

public class SwiftCooeePlugin: NSObject, FlutterPlugin {
    var sdkInstance = RegisterUser.shared
    
    static public func register(with registrar: FlutterPluginRegistrar) {
        let channel = FlutterMethodChannel(name: "cooee_plugin", binaryMessenger: registrar.messenger())
        let instance = SwiftCooeePlugin()
        registrar.addMethodCallDelegate(instance, channel: channel)
    }
    
    public func handle(_ call: FlutterMethodCall, result: @escaping FlutterResult) {
        if call.method == "getUDID"{
            print(">>>getUDID 1")
            let UDID = RegisterUser.shared.fetchUDID() ?? ""
            result(UDID)
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

当我们在 Flutter 应用程序中安装此插件并CooeePlugin.getUDID()在 dart 文件中调用时,不会调用上述方法。奇怪的是,甚至没有记录任何错误。

任何想法?

经过一个小时的调试,我们复制了相同的代码channel.setMethodCallHandler并且它起作用了-

public class SwiftCooeePlugin: NSObject, FlutterPlugin {
    var sdkInstance = RegisterUser.shared
    
    static public func register(with registrar: FlutterPluginRegistrar) {
        let channel = FlutterMethodChannel(name: "cooee_plugin", binaryMessenger: registrar.messenger())
        let instance = SwiftCooeePlugin()
        registrar.addMethodCallDelegate(instance, channel: channel)

        channel.setMethodCallHandler({
              (call: FlutterMethodCall, result: @escaping FlutterResult) -> Void in

              if call.method == "getUDID"{
                  print(">>>getUDID 2")
                  let UDID = RegisterUser.shared.fetchUDID() ?? ""
                  result(UDID)
              }
        })
    }
    
    public func handle(_ call: FlutterMethodCall, result: @escaping FlutterResult) {
        if call.method == "getUDID"{
            print(">>>getUDID 1")
            let UDID = RegisterUser.shared.fetchUDID() ?? ""
            result(UDID)
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

我们尝试用 Google 搜索该问题,但找不到任何相关原因。