美文网首页
Flutter调用Android Native(一)

Flutter调用Android Native(一)

作者: _悟_空 | 来源:发表于2021-08-21 20:55 被阅读0次
最近项目要换架构特此学习Flutter,本教程适合像我一样刚刚开始学习Flutter的小白。

Flutter调用Android原生方法

理解

一.Android端
1.创建插件
2.确定插件中对应的渠道名称
3.命名flag,以及flag对应的Android方法。
4.将插件在FlutterActivity中完成注册
二.Flutter端
1.创建渠道
2.调用对应的flag

Android端创建渠道和方法完成注册

一.Android端代码

// 创建plugins
package io.flutter.plugins;
import android.content.Context;
import android.widget.Toast;
import io.flutter.embedding.android.FlutterActivity;
import io.flutter.plugin.common.BinaryMessenger;
import io.flutter.plugin.common.MethodCall;
import io.flutter.plugin.common.MethodChannel;

public class MytestPlugins implements MethodChannel.MethodCallHandler {
    private static final String CHANNEL = "channel_name";
    private Context mContext;

    private MytestPlugins(Context context, BinaryMessenger binaryMessenger) {
        this.mContext = context;
        new MethodChannel(binaryMessenger, CHANNEL).setMethodCallHandler(this);
    }

    public static void registerWith(FlutterActivity activity, BinaryMessenger binaryMessenger) {
        new MytestPlugins(activity, binaryMessenger);
    }

    @Override
    public void onMethodCall(MethodCall call, MethodChannel.Result result) {
        String method = call.method;
        switch (method) {
            case "flag_name": //与Flutter中的invokeMethod传参一一对应。
                showAndroidToast();
                break;
            default:
                result.notImplemented();
                break;
        }
    }

    private void showAndroidToast() {
        Toast.makeText(mContext, "第一个Flutter invoke Native", Toast.LENGTH_LONG).show();
    }
}

// 注册plugins
public class MainActivity extends FlutterActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        MytestPlugins.registerWith(this, getFlutterEngine().getDartExecutor().getBinaryMessenger());
    }
}

二.Flutter端

         import 'package:flutter/services.dart';


         ElevatedButton(
            child: Text('Flutter invoke Native'),
            onPressed: () {
              toNative(); // 按钮点击事件调用方法;
            },
          ),

  /// 远程调用需要异步操作, 把这个方法生命成 async
  static void toNative() async {
    // 处理异常
    try {
      // channel_name这个时渠道的名称必须与Android端保持一致
      // flag_name与android端的MethodCall.method字符串一一对应;
      await MethodChannel('channel_name').invokeMethod('flag_name');
    } on PlatformException catch (e) {
    }
  }

项目地址

相关文章

网友评论

      本文标题:Flutter调用Android Native(一)

      本文链接:https://www.haomeiwen.com/subject/mllfiltx.html