在學習本編文章之前,如果您還不了解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監(jiān)聽。
// 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() {
}
});