因为iOS中有些库的功能,FLutter找不到对应功能的插件,所以考虑
- iOS通过代码实现这个功能,然后Flutter调用iOS原生代码。
- 自己编写一个插件,通过插件实现和调用原生方法实现这个功能,然后再使用插件。
目前在探索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");
},