Flutter与原生混合开发之:原生与Flutter通信与交互
2019-12-05 本文已影响0人
程序狮
上一篇 讲到原生集成Flutter,自己新建的Activity,在此类添加通信
1、Flutter调用原生时
//channel的名称,由于app中可能会有多个channel,这个名称需要在app内是唯一的。
private static final String CHANNEL = "platformMehotd";
private MethodChannel mothodChannel;
@Override
public void configureFlutterEngine(@NonNull FlutterEngine flutterEngine) {
mothodChannel = new MethodChannel(flutterEngine.getDartExecutor(), CHANNEL);
mothodChannel.setMethodCallHandler(new MethodChannel.MethodCallHandler() {
@Override
public void onMethodCall(MethodCall methodCall, MethodChannel.Result result) {
//call.method是获取调用的方法名字
//call.arguments 是获取参数
}
});
}
flutter调用原生直接返回结果
if (call.method.equals("getBatteryLevel")) {
int batteryLevel = getBatteryLevel();
if (batteryLevel != -1) {
result.success(batteryLevel); // 相当于是调用方法的return
} else {
result.error("UNAVAILABLE", "Battery level not available.", null); // 告诉调用者失败了
}
} else {
result.notImplemented(); // 告诉调用者没有此方法,避免一直等到阻塞在这
break;
}
MethodChannel是方法通讯的方式,一共3种方式,这篇只讲MethodChannel,
mothodChannel.setMethodCallHand
2、原生调用Flutter
// 第一个参数是方法名,第二个参数是参数
mothodChannel.invokeMethod("login", true);
3、原生打开指定的Flutter页面
Intent intent1 = new Intent(mContext, FlutterBaseActivity.class);
// 设置route,在Flutter中可以获取fangRoute
intent1.putExtra("initial_route", "fangRoute");
startActivity(intent1);
4、Flutter获取原生要跳转的route(在main文件build方法中获取)
String routeName = window.defaultRouteName;
//此时routeName就是上面传过来的fangRoute,在这可以通过不同的route返回不同的界面
Utility.mjPrint('routeName: $routeName');