专栏名称: 刘望舒
腾讯云最具价值专家
目录
相关文章推荐
复利大王  ·  湘ya一骨科的瓜? ·  16 小时前  
复利大王  ·  老同学中捞一捞能不能找到免费P友 ·  16 小时前  
复利大王  ·  手握25w华子股票,躺平了 ·  昨天  
复利大王  ·  520怀孕事件? ·  昨天  
51好读  ›  专栏  ›  刘望舒

Flutter基础(十三)Flutter与Android的相互通信

刘望舒  · 掘金  · android  · 2019-08-05 14:08

正文

请到「今天看啥」查看全文


MethodChannel可以实现Flutter调用Android,也可以实现Android调用Flutter,这里分别来进行举例。

2.Flutter调用Android

这里实现一个Android的简单的功能:弹出一个AlertDialog,然后在Flutter中调用这一功能。

Android端实现 先在MainActivity中实现功能,如下所示。

package com.example.platform_channel;

import android.app.AlertDialog;
import android.os.Bundle;
import io.flutter.app.FlutterActivity;
import io.flutter.plugin.common.MethodCall;
import io.flutter.plugin.common.MethodChannel;
import io.flutter.plugins.GeneratedPluginRegistrant;

public class MainActivity extends FlutterActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        GeneratedPluginRegistrant.registerWith(this);//1

        MethodChannel methodChannel = new MethodChannel(getFlutterView(), "com.example.platform_channel/dialog");//2
        methodChannel.setMethodCallHandler(new MethodChannel.MethodCallHandler() {//3
            @Override
            public void onMethodCall(MethodCall methodCall, MethodChannel.Result result) {
                if ("dialog".equals(methodCall.method)) {
                    if (methodCall.hasArgument("content")) {
                        showAlertDialog();
                        result.success("弹出成功");
                    } else {
                        result.error("error", "弹出失败", "content is null");
                    }
                } else {
                    result.notImplemented();
                }
            }
            private void showAlertDialog() {
                AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this);
                builder.setPositiveButton("确定", null);
                builder.setTitle("Flutter调用Android");
                builder.show();
            }
        });
    }
}
复制代码

注释1处用于注册插件,这个是创建Flutter工程时MainActivity自带的。 注释2处创建一个MethodChannel,它有两个参数,一个是getFlutterView方法,用于获取FlutterView,FlutterView实现了BinaryMessenger接口。一个是MethodChannel的Name,这个Name要保证是唯一的,后面Flutter端实现中会用到这个Name。 注释3处为methodChannel注册一个MethodCallHandler,用于监听回调的数据。 onMethodCall方法中的result是Flutter端传来的数据,我们需要对数据进行判断,然后向Flutter端发送数据。 向Flutter端发送数据有以下方法:

result.success(Object result) 结果成功,将result返回给Flutter端。

result.error(String errorCode,String errorMsg,Object errorDetails) 结果失败,将errorCode、errorMsg、errorDetails返回给Flutter端。

result.notImplemented() Android端没有实现Flutter端需要的方法,会将notImplemented返回给Flutter端。

Flutter端实现 在main.dart中加入如下代码。







请到「今天看啥」查看全文


推荐文章
复利大王  ·  湘ya一骨科的瓜?
16 小时前
复利大王  ·  老同学中捞一捞能不能找到免费P友
16 小时前
复利大王  ·  手握25w华子股票,躺平了
昨天
复利大王  ·  520怀孕事件?
昨天
iWeekly周末画报  ·  这座诺奖之城,美得很不“科学”!
8 年前
香港凤凰周刊  ·  居住证制度出台背后
8 年前
区块链铅笔Blockchain  ·  【观察】诺奖得主以比特币为例解释非理性繁荣
7 年前