Flutter与原生混合开发之:原生与Flutter通信与交互

上一篇 讲到原生集成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');

上一章: Flutter与原生混合开发之:原生集成Flutter

你可能感兴趣的:(Flutter与原生混合开发之:原生与Flutter通信与交互)