在学习本编文章之前,如果您还不了解Flutter如何调用Native那么请点这里。否则可能会阻碍您的理解。
Native调用Flutter,分为:
1.回调(Flutter调用Native后,Native回调给Flutter)。
2.主动调用(Native主动去调用Flutter)。
一、回调(核心代码👇)
// android plugins 中
@Override
public void onMethodCall(MethodCall call, MethodChannel.Result result) {
switch (call.method) {
case "method_flag":
result.success("native 返回值给 flutter");// android端回调给Flutter端。
break;
default:
result.notImplemented();
break;
}
}
// dart中
void flutteePassValueToAndroidAndGetBack() async {
var backResult= await new MethodChannel("Channel_name").invokeMethod("method_flag", "flutter 传值给 native");
print("----回调值-------$backResult");
}
二、主动调用(核心代码👇)
native主动调用Flutter与Flutter主动调用native使用上是类似的。调用端需要通过MethodChannel.invokeMethod去调用。被调用端需要注册MethodChannel.setMethodCallHandler监听。
// dart中
MethodChannel _channel = new MethodChannel("Channel_name");
_channel.setMethodCallHandler(onMethodCall);
// flutter注册MethodCallHandler供Native调用方法与android中注册一样。
Future<dynamic> onMethodCall(MethodCall call) async {
switch (call.method) {
case "native-invoke-flutter":
var argument = call.arguments;
print("---------$argument");
return "flutter 获得结果返回给native"; // 这里是Flutter返回结果给 native;
default:
return "";
}
}
// android 中
MethodChannel channel = new MethodChannel(binaryMessenger, "Channel_name");
channel.invokeMethod("native-invoke-flutter", "这是native 主动调用 flutter的参数", new MethodChannel.Result() {
@Override
public void success(Object result) { // 调用dart中的方法,成功回调。
Log.d("=---==--==", "success: result = " + result.toString());
}
@Override
public void error(String errorCode, String errorMessage, Object errorDetails) {
}
@Override
public void notImplemented() {
}
});