一、Flutter交互初始化
1、初始化Method Channel,定义交互名:message Method Channel
java
static const methodChannel = MethodChannel('messageMethodChannel');
2、flutter发起原生调用
java
methodChannel.invokeMethod(method, arguments);
其中method为调用原生函数对应key,arguments为传递数据,可多个任意类型值;同时返回值为Future,则可通过await或者then进行回调监听:
java
HiChannel.invokeMethod(HiChannel.PERMISSION, {
'permissions': [HiPremissionKey.ACCESS_FINE_LOCATION]
}).then((value) {
if (value) {
homeIsLocation(() {
eventBus.fire(UpdateDataEvent());
yesCallback();
}, noCallback);
}
});
3、flutter监听原生调用
java
methodChannel.setMethodCallHandler((call) {
if (call.method == TOAST) {
toast(call.arguments);
} else if (call.method == SHOW_LOADING) {
showLoading();
} else if (call.method == HIDE_LOADING) {
hideLoading();
}
return Future(() => "接受成功");
});
通过调用setMethodCallHandler监听原生调用,其中call.method为调用函数对应的key,call.arguments为传递数据,可为任意类型值。并原生可监听flutter的回调;
其中flutter回调通知原生,通过return Future(() => "接受成功");实现。
二、Android原生相关
1、Main Activity继承FlutterActivity类,并实现configureFlutterEngine函数:如下:
其中优先初始化调用监听:
java
methodChannel = MethodChannel(
flutterEngine.dartExecutor.binaryMessenger,
"messageMethodChannel"
)
其中messageMethodChannel为flutter初始化时定义的交互名。
2、调用监听函数setMethodCallHandler,如下:
通过call.method判断调用方法。call.argument("error")获取flutter传递数值。调用完毕后,可通过result.success(value)进行回调flutter,其中value为任意类型值。
3、Android原生调用Flutter函数代码
调用invokeMethod函数实现。其中method为调用函数key,arguments为传递参数。并监听Result回调。通过success获取。
三、IOS原生相关
1、在application中初始化iOS通信
java
let controller : FlutterViewController = window?.rootViewController as! FlutterViewController
let channel = FlutterMethodChannel(name: "messageMethodChannel", binaryMessenger: controller.binaryMessenger)
2、调用监听函数setMethodCallHandler
java
channel.setMethodCallHandler { (call:FlutterMethodCall, result:@escaping FlutterResult) in
if (call.method == "sendData") {
if let dict = call.arguments as? Dictionary<String, Any> {
let name:String = dict["name"] as? String ?? ""
let age:Int = dict["age"] as? Int ?? -1
result(["name":"hello,\(name)","age":age])
}
}
}
其中call.method为调用函数key,call.arguments为传递参数值。并且通过result(value)进行回调,value为任意类型参数。
3、IOS原生主动向Flutter发送数据
java
channel.invokeMethod(method, arguments:args)
👀关注公众号:Android老皮!!!欢迎大家来找我探讨交流👀