首页 > 解决方案 > 我想在插件中执行这个方法,怎么办

问题描述

我在做一个外接物理键盘输入的功能,扫码枪获取数据,执行这个方法,然后从插件返回flutter app

现在有个问题,如何在插件中覆盖这个方法,目前无效 在此处输入图片描述

标签: flutter

解决方案


Flutter 提供了一种使用MethodChannel.

从颤振MethodChannel文档(这里):

Flutter 使用一个灵活的系统,允许您调用特定于平台的 API,无论是 Android 上的 Kotlin 或 Java 代码,还是 iOS 上的 Swift 或 Objective-C 代码。

注意:如果需要,方法调用也可以反向发送,平台充当 Dart 中实现的方法的客户端。一个具体的例子是 [quick_actions][2] 插件。

MethodChannel从颤振调用本机平台代码上的函数的用法:

我们在 Flutter、iOS 和 Android 中创建一个同名的方法通道对象。Android 和 iOS 对象将设置一个方法调用处理程序来接收来自 Flutter 的调用。然后 Flutter 代码可以调用 invokeMethod 来调用原生对象上的处理程序

扑:

static final channelName = 'com.example.widget/keyEvent';
final methodChannel = MethodChannel(channelName);

await this.methodChannel.invokeMethod("dispatchKeyEvent");

安卓:

import androidx.annotation.NonNull;
import io.flutter.embedding.android.FlutterActivity;
import io.flutter.embedding.engine.FlutterEngine;
import io.flutter.plugin.common.MethodChannel;

public class MainActivity extends FlutterActivity {
  private static final String CHANNEL = "com.example.widget/keyEvent";

  @Override
  public void configureFlutterEngine(@NonNull FlutterEngine flutterEngine) {
  super.configureFlutterEngine(flutterEngine);
    new MethodChannel(flutterEngine.getDartExecutor().getBinaryMessenger(), CHANNEL)
        .setMethodCallHandler(
          (call, result) -> {
            if (call.method.equals("dispatchKeyEvent")) {
              //TODO: Call the dispatch key event function here
              bool resultValue;

              if (data != null) {
                result.success(data);
              } else {
                result.error("UNAVAILABLE", "Result not available", null);
              }
            } else {
              result.notImplemented();
            }
          }
        );
  }
}

推荐阅读