Flutter-返回自定义对象的PlatformChannel绑定方法

时间:2019-07-01 15:45:24

标签: android flutter flutter-platform-channel

我正在Flutter中玩PlatformChannel和MethodChannel。做一些基本操作...在opencv上进行抖动移植...但是我不知道如何解决这个问题!


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

Android:

@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类?我需要从原始来源开始重写类,或者是什么?


感谢您的关注。

1 个答案:

答案 0 :(得分:1)

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

您可以做些事情:

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

  2. 将Java对象的字段放入HashMap(键是字符串,值是受支持的类型),进行传输(将显示为Map<String, dynamic>)并访问这些字段。

    < / li>
  3. 编写您自己的编解码器(或标准编解码器的子类),在此您基本上可以完成(2),但字符串字段名称的开销较小。 (这很棘手...)