这里以Android为例,ios类似。
1、flutter调用Android方法:
首先建立连接:
在Android原生代码中添加
// 建立连接的凭证
public static String CHANNEL_MESSAGE = "channel/method";
// 建立连接的类
private MethodChannel methodChannel;
// flutter的view。这里以view的方式添加到Android原生项目
View flutterView = Flutter.createView(
LeapStarActivity.this,
getLifecycle(),
param
);
methodChannel = new MethodChannel((BinaryMessenger) flutterView, CHANNEL_MESSAGE);
// 这里是接收flutter调用Android方法地方
methodChannel.setMethodCallHandler((methodCall, result) -> {
if (methodCall != null && methodCall.method != null) {
switch (methodCall.method) {
case "onBackPressed":
break;
case "test":
break;
default:
break;
}
}
});
在flutter中添加:
// 必须和Android中的相同
static const CHANNEL_METHOD = 'channel/method';
static const platform = const MethodChannel(CHANNEL_METHOD);
// 调用onBackPressed方法
await platform.invokeMethod('onBackPressed');
// 调用test方法
await platform.invokeMethod('test');
2、在Android中调用flutter
基于以上CHANNEL_METHOD和platform不变
在flutter中添加被调用的方法
Future<dynamic> platformCallHandler(MethodCall call) async{
if(call!=null && call.method!=null){
switch(call.method){
case "test":
return "ok";
break;
}
}
}
// 在需要的地方初始化
_testChannel(){
Config.platform.setMethodCallHandler(platformCallHandler);
}
在Android中添加调用
methodChannel.invokeMethod("test", null, new MethodChannel.Result()
{
@Override
public void success(@Nullable Object o) {
LogUtils.d(TAG,"fcs-success");
}
@Override
public void error(String s, @Nullable String s1, @Nullable Object o) {
LogUtils.d(TAG,"fcs-error");
}
@Override
public void notImplemented() {
LogUtils.d(TAG,"fcs-notImplemented");
}
});