在學(xué)習(xí)本編文章之前缘挑,如果您還不了解Flutter如何調(diào)用Native那么請(qǐng)點(diǎn)這里。否則可能會(huì)阻礙您的理解。
Native調(diào)用Flutter,分為:
1.回調(diào)(Flutter調(diào)用Native后蟹瘾,Native回調(diào)給Flutter)暑塑。
2.主動(dòng)調(diào)用(Native主動(dòng)去調(diào)用Flutter)。
一根资、回調(diào)(核心代碼??)
// android plugins 中
@Override
public void onMethodCall(MethodCall call, MethodChannel.Result result) {
switch (call.method) {
case "method_flag":
result.success("native 返回值給 flutter");// android端回調(diào)給Flutter端架专。
break;
default:
result.notImplemented();
break;
}
}
// dart中
void flutteePassValueToAndroidAndGetBack() async {
var backResult= await new MethodChannel("Channel_name").invokeMethod("method_flag", "flutter 傳值給 native");
print("----回調(diào)值-------$backResult");
}
二、主動(dòng)調(diào)用(核心代碼??)
native主動(dòng)調(diào)用Flutter與Flutter主動(dòng)調(diào)用native使用上是類似的嫂冻。調(diào)用端需要通過MethodChannel.invokeMethod去調(diào)用胶征。被調(diào)用端需要注冊MethodChannel.setMethodCallHandler監(jiān)聽。
// dart中
MethodChannel _channel = new MethodChannel("Channel_name");
_channel.setMethodCallHandler(onMethodCall);
// flutter注冊MethodCallHandler供Native調(diào)用方法與android中注冊一樣桨仿。
Future<dynamic> onMethodCall(MethodCall call) async {
switch (call.method) {
case "native-invoke-flutter":
var argument = call.arguments;
print("---------$argument");
return "flutter 獲得結(jié)果返回給native"; // 這里是Flutter返回結(jié)果給 native;
default:
return "";
}
}
// android 中
MethodChannel channel = new MethodChannel(binaryMessenger, "Channel_name");
channel.invokeMethod("native-invoke-flutter", "這是native 主動(dòng)調(diào)用 flutter的參數(shù)", new MethodChannel.Result() {
@Override
public void success(Object result) { // 調(diào)用dart中的方法睛低,成功回調(diào)。
Log.d("=---==--==", "success: result = " + result.toString());
}
@Override
public void error(String errorCode, String errorMessage, Object errorDetails) {
}
@Override
public void notImplemented() {
}
});