Android 颤振-返回自定义对象的PlatformChannel绑定方法

Android 颤振-返回自定义对象的PlatformChannel绑定方法,android,flutter,flutter-platform-channel,Android,Flutter,Flutter Platform Channel,我正在玩Flatter中的PlatformChannel和MethodChannel。做一些基本的操作。。。正在为颤振进行opencv移植。。。但我不知道怎么解决这个问题 调用返回基本类型对象的简单方法没有问题,如下所示: 安卓: 省道: 省道: 如何实现标量dart类?我需要从原始资料开始重写这个类,还是什么 感谢您的关注。StandardMessageCodec只能跨边界发送。此外,您不能跨边界发送Java类-在Dart端它会变成什么 你可以做一些事情: 将Java对象序列化为JSON,传输

我正在玩Flatter中的PlatformChannel和MethodChannel。做一些基本的操作。。。正在为颤振进行opencv移植。。。但我不知道怎么解决这个问题

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

安卓:

省道:

省道:

如何实现标量dart类?我需要从原始资料开始重写这个类,还是什么

感谢您的关注。

StandardMessageCodec只能跨边界发送。此外,您不能跨边界发送Java类-在Dart端它会变成什么

你可以做一些事情:

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

将Java对象的字段放入HashMap,键是字符串,值是受支持的类型,将其转换为映射并访问字段

编写自己的编解码器或对标准编解码器进行子类化,这样基本上只需编写2个,但字符串字段名的开销较小。这很棘手


是的,我已经阅读了有关StandardMessageCodec的文档。。。我正试着跟随你的3d点!谢谢你的努力。我认为使用JSON也是可能的。。。最后,有必要将该类包装成dart代码,因为没有任何方法可以挖掘!再次感谢:我正在尝试使用json,我可以看出这更好!!:请看一下这个关于2技巧的答案。无论如何,这是我们通常使用的方法。关于3,您认为扩展StandardMessageCodec很容易,但您需要访问的某些内容是私有的,因此您最终会复制一些样板文件。我这样做是为了增加对float[]Float32List的支持,这让我很痛苦。
@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;
}
  @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??????
}