【问题标题】:Flutter - PlatformChannel binding methods that returns custom ObjectsFlutter - 返回自定义对象的 PlatformChannel 绑定方法
【发布时间】:2019-11-12 06:47:12
【问题描述】:

我在 Flutter 中使用 PlatformChannel 和 MethodChannel。做一些基本的操作......为颤振做一个opencv移植......但我不知道如何解决这个问题!


调用简单方法没有问题,返回基本类型的对象,如下所示:

安卓:

@Override
  public void onMethodCall(final MethodCall call, final Result result) {
    switch (call.method) {
      case "getVersionString":
        result.success(org.opencv.core.Core.getVersionString());
        break;
      default:
        result.notImplemented();
    }
  }

飞镖:

Future<String> get versionString async {
  return await _channel.invokeMethod('getVersionString') as String;
}


但是如果我有一些自定义对象呢?类似于:
Android:

  @Override
  public void onMethodCall(final MethodCall call, final Result result) {
    switch (call.method) {
      case "getVersionString":
        result.success(org.opencv.core.Core.getVersionString());
        break;
      case "Scalar":
        result.success(org.opencv.core.Core.Scalar());
        break;
      default:
        result.notImplemented();
    }
  }
}

飞镖:

class Scalar {
  static const MethodChannel _channel = MethodChannel('flutter_opencv');

  // WHAT TO DO HERE??????
}  

如何实现 Scalar dart 类?我需要从原始资源开始重写课程还是什么?


感谢您的关注。

【问题讨论】:

    标签: android flutter flutter-platform-channel


    【解决方案1】:

    StandardMessageCodec 只能发送certain types 越界。此外,你不能发送一个 Java 类跨越边界 - 它会在 Dart 端变成什么?

    您可以做一些事情:

    1. 将 Java 对象序列化为 JSON,传输字符串,然后反序列化为 Dart 对象

    2. 将Java对象的字段放入HashMap(key是字符串,value是支持的类型),传输(会显示为Map&lt;String, dynamic&gt;)并访问字段。

    3. 编写您自己的编解码器(或标准编解码器的子类),您最终基本上会执行 (2),但字符串字段名称的开销较少。 (这很棘手……)

    【讨论】:

    • 是的,我已经阅读了有关 StandardMessageCodec 的文档...我正在尝试继续关注您的 3d 点!谢谢你的努力。我想这也可以使用 JSON ......最后有必要将类包装到 dart 代码中,没有办法逃脱!再次感谢:)
    • 我正在尝试使用 json,我可以看到它更好! :)
    • 查看 (2) 技术的这个答案。对于它的价值,这是我们通常使用的方法。 stackoverflow.com/questions/56852851/… 关于 (3),您认为扩展 StandardMessageCodec 很容易,但您需要访问的某些内容是私有的,因此您最终会复制一些样板文件。我这样做是为了添加对 float[] Float32List 的支持 - 这很痛苦。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-10-10
    • 1970-01-01
    • 2015-11-01
    • 2021-11-22
    • 2015-06-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多