Flutter调用iOS中自定义的方法

291 阅读1分钟

因为iOS中有些库的功能,FLutter找不到对应功能的插件,所以考虑

  1. iOS通过代码实现这个功能,然后Flutter调用iOS原生代码。
  2. 自己编写一个插件,通过插件实现和调用原生方法实现这个功能,然后再使用插件。

目前在探索Flutter调用原生方法。记录一下

在iOS中新建一个管理类: FlutterNativePlugin


import UIKit
import Flutter
class FlutterNativePlugin: NSObject,FlutterPlugin  {

    static func register(with registrar: FlutterPluginRegistrar) {
        //target是一个唯一的标识
        let channel = FlutterMethodChannel(name: "target", binaryMessenger: registrar.messenger())
        let instance = FlutterNativePlugin()
        registrar.addMethodCallDelegate(instance, channel: channel)
    }
    //
    func handle(_ call: FlutterMethodCall?, result: FlutterResult) {
        //common监听的方法名称
        if call?.method == "common" {
            result("返回给Flutter端的数据")
        } else {
            result(FlutterMethodNotImplemented)
        }
    }
  
}

然后在AppDelegete最后注册这个类

@objc class AppDelegate: FlutterAppDelegate {
  override func application(
    _ application: UIApplication,
    didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?
  ) -> Bool {
    GeneratedPluginRegistrant.register(with: self)
    //注册这个插件
    FlutterNativePlugin.register(with:self.registrar(forPlugin: "FlutterNativePlugin")!)
    return super.application(application, didFinishLaunchingWithOptions: launchOptions)
  }
}

最后在Flutter中使用

  Future runiOSMethod() async {
    const platform = const MethodChannel('target');
    var result;
    try {
      result = await platform.invokeMethod('common');
      return Future.value(result);
    } on PlatformException catch (e) {
      return Future.error(e.toString());
    }
  }
  
  //再点击事件中
  onPressed: () async {
  //得到返回的值
    var futureValue = await runiOSMethod();
    print("futureValue===$futureValue");
  },